在Ruby中:
[[1,2],[2,3],[9,3]].find_index {|i| i.include?(3)}
返回1
,它是包含3的数组中第一个元素的索引。在Python中是否存在等价物?我查看了List
的{{1}}方法,但它似乎没有将lambda作为参数。
答案 0 :(得分:4)
我通常会写类似
的内容>>> a = [[1,2],[2,3],[9,3]]
>>> next(i for i,x in enumerate(a) if 3 in x)
1
如果找不到,则会收到StopIteration
异常,或者您可以传递默认值作为第二个参数返回:
>>> next(i for i,x in enumerate(a) if 99 in x)
Traceback (most recent call last):
File "<ipython-input-4-5eff54930dd5>", line 1, in <module>
next(i for i,x in enumerate(a) if 99 in x)
StopIteration
>>> next((i for i,x in enumerate(a) if 99 in x), None)
>>>
答案 1 :(得分:4)
据我所知,Python中没有直接的等效函数。
您可以使用enumerate
列表理解获得多个指标:
>>> [i for i, xs in enumerate([[1,2],[2,3],[9,3]]) if 3 in xs]
[1, 2]
如果您只需要第一个索引,则可以将next
与生成器表达式一起使用:
>>> next(i for i, xs in enumerate([[1,2],[2,3],[9,3]]) if 3 in xs)
1
>>> next((i for i, xs in enumerate([[1,2],[2,3],[9,3]]) if 999 in xs), 'no-such-object')
'no-such-object'