如果我有一個列表如何找到一個元素的所有索引列表中的Python
a=[1,0,0,1,0,1,1,1,0,1,0,0]
我想分別找到的0和1的指數,在這種情況下說,
index_0 = [1,2,4,8,10,11]
index_1 = [0,3,5,6,7,9]
有沒有一種有效的方法來做到這一點?
如果我有一個列表如何找到一個元素的所有索引列表中的Python
a=[1,0,0,1,0,1,1,1,0,1,0,0]
我想分別找到的0和1的指數,在這種情況下說,
index_0 = [1,2,4,8,10,11]
index_1 = [0,3,5,6,7,9]
有沒有一種有效的方法來做到這一點?
index_0 = [i for i, v in enumerate(a) if v == 0]
index_1 = [i for i, v in enumerate(a) if v == 1]
或者與numpy的:
import numpy as np
a = np.array(a)
index_0 = np.where(a == 0)[0]
index_1 = np.where(a == 1)[0]
另一種方式來做到這一點是:
import os
a = [1,0,0,1,0,1,1,1,0,1,0,0]
index_0 = []
index_1 = []
aux = 0
for i in a:
if i == 0:
index_0.append(aux)
aux += 1
else:
index_1.append(aux)
aux += 1
print index_0
print index_1
使用itertools.compress
:
>>> a=[1,0,0,1,0,1,1,1,0,1,0,0]
>>> index_1 = [x for x in itertools.compress(range(len(a)),a)]
>>> index_1
[0, 3, 5, 6, 7, 9]
>>> index_0 = [x for x in itertools.compress(range(len(a)),map(lambda x:not x,a))]
>>> index_0
[1, 2, 4, 8, 10, 11]
可以實現使用一個for循環:爲更好和更高效率
>>> a=[1,0,0,1,0,1,1,1,0,1,0,0]
>>> index_0 = []
>>> index_1 = []
>>> for i,x in enumerate(a):
... if x: index_1.append(i)
... else: index_0.append(i)
...
>>> index_0
[1, 2, 4, 8, 10, 11]
>>> index_1
[0, 3, 5, 6, 7, 9]
可能重複的[如何在列表中找到所有出現的元素?](http://stackoverflow.com/questions/6294179/how-to-find-all-occurrences-of-an-元素在列表中) – simopopov 2014-12-07 16:46:22