2017-03-10 10 views
0

私は比較的新しいPython言語です。私はアルゴリズムを開発しようとしていますが、私のコードでCのような構造を管理するという問題に固執しています。 コードは次のようになります。PythonのC型構造体のリストは値を保持しません

import numpy as np 
from random import randint 
from ctypes import * 


class three(Structure): 
    _fields_ = [ 
     ("a", c_int), 
     ("b", c_int), 
     ("c", c_int), 
    ] 

test = [three for i in range(10)] 

for i in range(10): 
    test[i].a = randint(0,20) 
    test[i].b = randint(0,20) 
    test[i].c = randint(0,20) 
    print test[i].c 

print "-----------------TEST PRINT-------------------" 
for i in range(10): 
    print test[i].c 

それは、私はそれらのリストを生成し、各構造体の各フィールドにこれを実行している0と20 間のランダムな値を代入し、私は私の構造体を作成し、非常に簡単ですコードの結果は次のようになります。

2 
14 
5 
20 
17 
8 
4 
5 
10 
6 
-----------------TEST PRINT------------------- 
6 
6 
6 
6 
6 
6 
6 
6 
6 
6 

直後に同じベクターを印刷しようとすると、最後の要素を読み取ることができるようです。 ここには何が起こっていますか?これについての手がかりは?構造物のリストはどのようにして最善に扱われますか

ご協力いただきありがとうございます。 ジョバンニ

答えて

0

あなたは

test = [three for i in range(10)] 

を実行すると、あなたは10個の異なるオブジェクトを作成するが、クラスにthree 10回を渡していません。これは、タイプthreeの10種類のオブジェクトを作成します

test = [three() for i in range(10)] 

:あなたは()を追加する必要があるオブジェクトを初期化します。

編集:

あなたがthreec静的変数を取得しているthree.cを使用しての代わりthree().cされています。 here

関連する問題