2016-11-03 21 views
0

[1,2,1,0,1,1,0,3 ..]のようなリストl1があります。私は各要素について、その要素と同じ値を持つ要素のインデックスを探したい。リスト内の共通要素を見つける方法

たとえば、リストの最初の値1の場合、リスト内に1が存在するすべてのインデックスをリストし、リスト内のすべての要素について同じことを繰り返す必要があります。リストを反復処理する関数を書いても構いませんが、あらかじめ定義された関数があるかどうかをチェックしたいと思っていました。私はパンダのデータフレームの列からリストを取得しています

シリーズ/データフレームライブラリあれば、それは良いノウハウでしょうどのような機能を提供します

+0

あなたが書いた機能と予想される出力を示した場合、それは大いに役立つだろう。私はあなたのインデックスに合った要素だけを求めたいのか、各位置の要素のインデックスを含んでいる2次元オブジェクトを必要としているのか分かりません。 – chthonicdaemon

答えて

1

あなたも逆を返すことができnumpy.uniqueを、使用することができます。これは、numpy.whereを使用してインデックスを再構築するために使用することができます:

In [49]: a = [1,2,1,0,1,1,0,3,8,10,6,7] 

In [50]: uniq, inv = numpy.unique(a, return_inverse=True) 

In [51]: r = [(uniq[i], numpy.where(inv == i)[0]) for i in range(uniq.size)] 

In [52]: print(r) 
[(0, array([3, 6])), (1, array([0, 2, 4, 5])), (2, array([1])), (3, array([7])), (6, array([10])), (7, array([11])), (8, array([8])), (10, array([9]))] 
1

私はブルートuはここ

を最適化することができますことforce..mayしようとしたのpython3コード

L = [1,2,1,0,1,1,0,3] 
D = dict() 
for i in range(len(L)): 
    n =[] 
    if L[i] not in D.keys(): 
     for j in range(len(L)): 
      if L[i] == L[j]: 
       n.append(j) 
     D[L[i]] = n 
for j in D.keys(): 
    print(j,"->",D.get(j)) 
+0

入力リストの各項目に対して入力リストを1回だけ繰り返す必要はありません。書かれているように、このアルゴリズムはO(n^2)としてスケールされますが、これはあまり大きくありません。 –

0

あなたはまた、のような何かを試すことができていますこれは:

import pandas as pd 
df = pd.DataFrame({'A': [1,2,1,0,1,1,0,3]}) 
uni = df['A'].unique() 
for i in uni: 
    lists = df[df['A'] == i].index.tolist() 
    print(i, '-->', lists) 

出力:

1 --> [0, 2, 4, 5] 
2 --> [1] 
0 --> [3, 6] 
3 --> [7] 
0

これはdefaultdictを使用して達成できます。

from collection import defaultdict 

input = [1,2,1,0,1,1,0,3] 
#Dictionary to store our indices for each value 
index_dict = defaultdict(list) 
#Store index for each item 
for i, item in enumerate(input): 
    index_dict[item].append(i) 

あなたが入力リスト内の対応する要素と同一の要素のインデックスを含むリストが必要な場合は、あなただけの辞書への参照を作成することができます

same_element_indices = [index_dict[x] for x in input] 

これは持っています同一要素ごとに1つのオブジェクトのみを参照するという利点があります。

出力は次のようになります。

[[0, 2, 4, 5], 
[1], 
[0, 2, 4, 5], 
[3, 6], 
[0, 2, 4, 5], 
[0, 2, 4, 5], 
[3, 6], 
[7]] 
関連する問題