2

Python 3 中的函数允许我们从一个匹配过滤器函数中定义的任意条件filter的元素返回。Iterable我希望能够做类似的事情,除了返回满足条件的元素,我想返回元素的索引。(类似于对象的index方法list

>>> 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")

但关键是,我希望能够使用任意过滤器函数和任意 Iterables(不仅仅是列表!)

有没有一种方便的方法可以在不手动处理函数的情况下做到这一点?

4

1 回答 1

3

我会使用列表理解:

>>> [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]
于 2013-03-23T19:48:05.290 回答