如何查找列表中的所有元素?

index()只会给出列表中第一个出现的项目。 是否有一个简单的方法来返回列表中的所有索引?

你可以使用列表理解:

 indices = [i for i, x in enumerate(my_list) if x == "whatever"] 

虽然不是一个直接的列表解决scheme, numpy真的照耀这样的事情:

 import numpy as np values = np.array([1,2,3,1,2,4,5,6,3,2,1]) searchval = 3 ii = np.where(values == searchval)[0] 

收益:

 ii ==>array([2, 8]) 

对于具有大量元素的列表(数组)而言,这可以显着快于其他某些解决scheme。

使用list.index的解决scheme:

 def indices(lst, element): result = [] offset = -1 while True: try: offset = lst.index(element, offset+1) except ValueError: return result result.append(offset) 

对于大型列表来说,它比列举理解要快得多。 如果你已经拥有arrays,它也比numpy解决scheme慢得多,否则转换成本超过了速度增益(在100,1000和10000个元素的整数列表上testing)。

注意:基于Chris_Rands的评论注意:如果结果足够稀疏,这个解决scheme比列表理解更快,但是如果列表中有许多正在search的元素的实例(超过列表的15% ,在1000个整数列表的testing中),列表理解更快。

怎么样:

 In [1]: l=[1,2,3,4,3,2,5,6,7] In [2]: [i for i,val in enumerate(l) if val==3] Out[2]: [2, 4] 
 occurrences = lambda s, lst: (i for i,e in enumerate(lst) if e == s) list(occurrences(1, [1,2,3,1])) # = [0, 3] 

对于所有事件,还有一个解决scheme(对不起,如果重复)

 values = [1,2,3,1,2,4,5,6,3,2,1] map(lambda val: (val, [i for i in xrange(len(values)) if values[i] == val]), values) 

如果您使用的是Python 2,则可以通过以下方法实现相同的function:

 f = lambda my_list, value:filter(lambda x: my_list[x] == value, range(len(my_list))) 

其中, my_list是要获取索引的列表, value是search的值。 用法:

 f(some_list, some_element) 

编辑(白痴):

添加到好的答案。

 def count(x, lst): ind = [] for i in lst: if i == x: ind.append(lst.index(x)) return ind