2012-04-28 24 views
10

2つのリストaとbに対して、両方に表示される値のインデックスを取得するにはどうすればよいですか?例えば、Pythonで2つのリストを比較し、一致した値のインデックスを返す

a = [1, 2, 3, 4, 5] 
b = [9, 7, 6, 5, 1, 0] 

return_indices_of_a(a, b) 

(a[0],a[4]) = (1,5)で、[0,4]を返します。

+0

[Python:リストの交差点を見つける方法](http://stackoverflow.com/questions/3697432/python-how-to-find-list-intersection) – ChristopheD

+2

私はこの質問は考えませんそれが類似しているかもしれないが、その複製。 – jamylak

答えて

18

bsetにするのが最も良い方法は、メンバーシップの確認だけであるためです。大きなリストでは

>>> a = [1, 2, 3, 4, 5] 
>>> b = set([9, 7, 6, 5, 1, 0]) 
>>> [i for i, item in enumerate(a) if item in b] 
[0, 4] 
+0

ありがとう!この場合、「a = [1、2、9、8]」と「b = [1,9,1]」(bはaのサブセット)で、目的の結果は「[0,2,0 ] '(bの各値に一致するインデックス)?セットをbにすると、2番目の '1'のインデックスとインデックスの順序が失われます。 – user1342516

+0

その場合、 '[0、2、0、1、2]'などのようなものではないでしょうか? ( 'b 'のすべての項目が両方のリストにあるので) – jamylak

+0

私は明確ではありません...この場合に必要な結果のインデックスは' array(a)[indices] = b'を与えます。私は質問を編集しました。多分もっと明確な記述かもしれません。 – user1342516

5
def return_indices_of_a(a, b): 
    b_set = set(b) 
    return [i for i, v in enumerate(a) if v in b_set] 
2

これは助けになることがあります。

for item in a: 
index.append(bisect.bisect(b,item)) 
    idx = np.unique(index).tolist() 

はnumpyのをインポートするようにしてください。

関連する問題