用生成器模拟索引方法
在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]