2015-09-08 15 views
5

最初に何をしたいかを示しましょう。
私は私が欲しいのは、アレイ内で繰り返される数字の位置を選択し、マトリックスにx_newどこにそれを印刷することで、AttributeError: 'numpy.int32'オブジェクトに属性 'append'がありません

x = [1, 2, 1, 2, 3, 3, 2, 3, 1, 2] 

を行列を持つ:

x_new[0]= [0,2,8] (for similar position of repeated 1's in x) 
x_new[1]=[1,3,6,9](for similar position of repeated 2's in x) 
x_new[2]=[4,5,7] (for similar position of repeated 3's in x) 

今まで、私がやっていること

a=[]  
x=m[:,3] #x=np.array([1, 2, 1, 2, 3, 3, 2, 3, 1, 2])  
ss=set([i for i in x if sum([1 for a in x if a == i]) > 1])  
lenss=len(ss)  
for ln in range(lenss):  
    for k in range(10):  
     if(x[k]== list(ss)[ln]):  
      print k  
     a.append(ln)  
    print 'next'  

しかしa.appendラインでそれを示しています::ある

'numpy.int32'オブジェクトには属性 'append'がありません

誰でもこのエラーを解決する方法を教えてください。 のPython 2.xのに感謝

答えて

5

、あなたはリストの内包表記に使用a変数ので、あなたは、周囲の名前空間にリスト内包リークの内側に使用する変数 -

ss=set([i for i in x if sum([1 for a in x if a == i]) > 1]) 

は、あなたが定義したa変数を変更しますxの要素へのリストとして。このため

例 -

>>> i 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'i' is not defined 
>>> s = [i for i in range(5)] 
>>> i 
4 

あなたがリストcomprehensin内の別の名前を使用する必要があり、それはあなたがあなたの変数のため、より意味のある名前を使用する場合、それはそのような問題に実行しているのリスクを減らすことに役立つだろう。

この問題は、Python 3.xでは発生しません。これは、list comprehensstandingには独自の名前空間があります。

+0

申し訳ありません...あなたを手に入れました。私にチェックさせてください。ありがとうたくさん –

1

あなたの変数aを再割り当て:最初の行a=[]で をしていますが、SSジェネレータで再びaを使用します。

ss=set([i for i in x if sum([1 forin x if a == i]) > 1])

簡単な例:

>>> [x for x in range(10)] 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> x 
9 
>>> 
+0

おっと、すみません...あなたを手に入れました。私にチェックさせてください。おかげでたくさん –

2

これはnumpyのです問題の解決方法

x = np.array(x) 
unique = np.unique(x) 
[np.where(x == unique_num) for unique_num in unique] 
+0

ありがとうたくさんの仲間:) –

関連する問題