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

时间:2012-11-20 17:44:39

标签: python list indexing element

我阅读了帖子:如何查找列表中所有出现的元素? How to find all occurrences of an element in a list?

答案是:

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

我知道这是列表理解,但我不能破坏这些代码并理解它。有人可以请我吃饭吗?


如果执行以下代码:我知道枚举只会创建一个元组:

l=['a','b','c','d']
enumerate(l)

输出:

(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')

如果有一种更简单的方法,我也会对此持开放态度。

2 个答案:

答案 0 :(得分:7)

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

# Create an empty list
indices = []
# Step through your target list, pulling out the tuples you mention above
for index, value in enumerate(my_list):
    # If the current value matches something, append the index to the list
    if value == 'whatever':
        indices.append(index)

结果列表包含每个匹配的索引位置。采用相同的for构造,您实际上可以更深入地遍历列表列表,将您发送到一个神奇的疯狂螺旋:

In [1]: my_list = [['one', 'two'], ['three', 'four', 'two']]

In [2]: l = [item for inner_list in my_list for item in inner_list if item == 'two']

In [3]: l
Out[3]: ['two', 'two']

相当于:

l = []
for inner_list in my_list:
  for item in inner_list:
    if item == 'two':
      l.append(item)

你在开头包含的列表理解是我能想到的最好的Pythonic方式来实现你想要的。

答案 1 :(得分:0)

indices = []
for idx, elem in enumerate(my_list):
    if elem=='whatever':
        indices.append(idx)