2016-04-07 24 views
0

2つのリストを相互参照して、2つのリストが一致するアイテムを見つけます。最初のリストorigのサイズは32アイテムですが、私はそれよりもはるかに大きなリストsdss(これは112,000アイテムのサイズです)と相互参照しています。私は効率的に内部の相互参照項目のインデックス(または場所)を返すか、相互参照リストのインデックス

for i in range(0,len(orig),1): 
    if orig[i] in sdss: 
     print('\n %s' % (orig[i])) 

これはしかし、私に二つのリストの間で同じである項目を与える:これまでのところ、これは私が持っているものですsdssリスト(大きいリスト)の?

編集:私はより明確にすべきだったと思います。私は実際には文字列ではなく、intで2つの配列を相互参照しています。

+0

を使用することができます

は、入力リストにソートされ、独自のそれらの要素はありますか? – Divakar

答えて

3

順序は重要ではない場合は、「インデックス」は価値場合とValueErrorを発生させていることタプル

[(sdss.index(common_element),common_element) for common_element in set(orig) & set(sdss)] 

注意として、インデックスと要素を取得するためにユニークな共通の要素とリスト内包表記を見つけるために、一連の交差点を使用することができますがリストに見つかりませんが、この場合、値はsdssに存在します。したがって、存在しない要素がエラーを投げることを心配する必要はありません。あなたはまた、numpy.intersect1d

+0

私はもっと明確にすべきだったと思います。私は実際には2つのint配列(文字列ではない)を相互参照しています。上記の解決策はまだ機能するはずですか? – maelstromscientist

+0

@maelstromscientistはい!それはintのためにも働く。 – LearnerEarner

0

あなたは、リスト内の項目のインデックスを与えるが、失敗すると-1を返します.find()を使用することができます。

for item in orig: 
    index = sdss.find(item) 
    if index != -1: 
     print("\n %d" % index) 

あなたはorigにインデックスを必要としないので、あなたが反復どのように私は修正。あなたは各項目が必要です。ところで、range(len(orig))を使用している可能性があります。これは、開始引数とステップ引数がすでにデフォルトであるためです。

関連する問題