2012-04-12 75 views
7

可以說我有兩個列表。它們是從-5到5的等級書籍的列表。根據項目條件在兩個列表中查找索引

我想知道什麼時候list1的元素是>= 1和list2的元素== 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 2012-04-12 17:15:46

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

我更喜歡這個,因爲它不會創建一箇中間變量 - 過濾器中的比較是直接的('list1'和'list2'都在那裏),並且更容易進行心理追蹤。沒有「v」,你必須掃描行來看看它是如何定義的。 – Izkata 2012-04-12 18:00:13

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(0)'而不是'count()'?我也覺得這是最好的解決方案。 – jamylak 2012-04-12 17:13:52

+0

@jamylak:可讀性。我也是,我會在我的代碼中使用這個:) – 2012-04-12 17:18:46

+0

實際上回想起這個我認爲我寧願做'[我爲我,(x,y)枚舉(izip(list1,list2))如果x > = 1和y == 0]'而不是壓縮計數。 – jamylak 2012-04-16 12:57:29

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' vs'list2 [i]'),但是對索引'i'和元素'l1','l2'的處理略有不同,所以語法符合語義。 – DSM 2012-04-12 17:29:39

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 2012-04-12 17:30:52

+0

可能是這樣,但我總是喜歡把它當作一個布爾數組的矢量算術。但確保人們知道這兩種選擇都存在是很好的。 – ely 2012-04-12 17:32:45

+0

想一想,'== True'是不必要的,不是嗎? – DSM 2012-04-12 17:34:21

相關問題