用生成器模拟索引方法

2 投票
1 回答
6344 浏览
提问于 2025-04-17 20:04

在Python 3中,filter函数可以让我们从一个可迭代对象中筛选出符合某些条件的元素。这些条件是通过一个过滤函数来定义的。我想做的事情有点类似,不过我希望得到的是这些元素的索引,而不是直接返回符合条件的元素。(这有点像list对象的index方法)

>>> stuff = ("foo", "bar", "baz")
>>> f = filter(lambda x: x == "baz", stuff)
>>> [e for e in f]
['baz'] # Here I want the integer 2 because "baz" is at index 2

当然,我知道在这个简单的例子中,我可以直接这样做:

stuff = ["foo", "bar", "baz"]
index = stuff.index("baz")

但我想表达的是,我希望能够使用任意的过滤函数和任意的可迭代对象(不仅仅是列表!)来获取索引。

有没有什么方便的方法可以做到这一点,而不需要自己手动写一个函数呢?

1 个回答

4

我会使用列表推导式:

>>> [i for i,x in enumerate(stuff) if x == "baz"]
[2]

或者使用生成器表达式:

>>> gen = (i for i,x in enumerate(stuff) if x == "baz")
>>> list(gen)
[2]

撰写回答