2012-04-12 9 views
7

私は2つのリストを持っていると言います。 5から5までの目盛のリストです。アイテムに基づいて2つのリストのインデックスを検索します。条件

list1の要素が>= 1でリスト2の要素が== 0のときを知りたいと思います。

list1 = [3, 3, 1, 0, 3, 0, 3, 0, 0, -3, 0, 5, 3, 0, 1, 0, 0, 5, 3, 0, 0, 0, 0, 1, 0, 3, 0, 1, 0, 0, 3, 5, 3, 3, 0, 0, 0, 5, 0, 5, 0, 3, 3, 0, -3, 0, 0, 5, 1, 5, 3, 0, 3, 0, 0] 
list2 = [5, 0, 0, 0, 0, 0, 5, 0, 0, 1, 0, 5, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 5, 5, 5, 3, 0, 0, 0, 3, 0, 0, 0, 5, 3, 0, 0, 0, 0, 5, 0, 5, 3, 0, 0, 0, 0] 

list1[1] = 3list2[1] = 0、私はこれはで行わどこのすべての異なるインデックスを見つけることができるようにしたいです。

これは混乱しても申し訳ありませんが、私は本当にこれをどのように言いたいのか分かりません。

答えて

11
>>> [i for i, v in enumerate(list1) if v>=1 and list2[i]==0] 
[1, 2, 4, 14, 18, 27, 39, 48, 52] 
+0

完全に働いた、助けてくれてありがとう! – Mike

4
>>>idx_list = [i for i in range(len(list1)) if list1[i] > 1 and list2[i] == 0] 
+0

中間変数を作成しないため、これはもう1つ好きです。フィルターの比較は直接( 'list1'と' list2'が両方)あり、精神的に追跡が容易です。ラインがどのように定義されているかを見るためにラインをスキャンしなければならないという「v」はありません。 – Izkata

2

私はこれを読みました。

>>> from itertools import count 
>>> [i for i,one,two in zip(count(0), list1, list2) if one >= 1 and two == 0] 
[1, 2, 4, 14, 18, 27, 39, 48, 52] 

ここではitertools.count docです。

+1

+1しかし、なぜ単に 'count()'の代わりに 'count(0)'を使うのでしょうか?また、私はこれが最高の解決策であることを見出します。 – jamylak

+0

@jamylak:可読性。私も、私のコードでこれを使用したいと思う:) –

+0

実際にこれを私はむしろ '[私は、(izip(list1、list2))if > = 1およびy == 0] 'を使用します。 – jamylak

7

他の変形:

>>> [i for i, (l1, l2) in enumerate(zip(list1, list2)) if l1 >= 1 and l2 == 0] 
[1, 2, 4, 14, 18, 27, 39, 48, 52] 
+1

これはおそらく私がやったことでしょう。私はそれが( 'v'対' list2 [i] ''とは違って)2つのリスト要素を同様に扱いますが、インデックス 'i'と要素' l1'、 'l2'を少し違って扱います。セマンティクスに適合します。 – DSM

2

numpyのアレイを使用して、これは論理的なインデックスとやる-ことができます:

import numpy as np 
list1 = np.array([1, -1, 0, 0, 1]) 
list2 = np.array([0, 5, 0, 0, 0]) 

# Option 1, multiply the logicals together. 
inds = np.where((list1 >= 1)*(list2 == 0))[0] 

# Option 2, pure logicals. 
inds = np.where((list1 >= 1) & (list2 == 0))[0] 

inds[0] = 0inds[1] = 4

+1

'&'は '*'より自然に読めると思います。 – DSM

+0

おそらくそうですが、私はいつもブール値の配列に対するベクトル演算と考えるのが好きです。しかし、両方のオプションが存在することを皆さんに知ってもらうことをお勧めします。 – ely

+0

それを考えると、 '== True'は不要ですか? – DSM

関連する問題