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(不仅仅是列表!)来获取索引。
有没有一种方便的方法可以在不手动操作的情况下执行此操作?
答案 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]