用发生器模拟索引方法

时间:2013-03-23 19:44:30

标签: python filter python-3.x

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(不仅仅是列表!)来获取索引。

有没有一种方便的方法可以在不手动操作的情况下执行此操作?

1 个答案:

答案 0 :(得分: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]