Python相当于Ruby的#find_index与lambda?

时间:2013-12-27 16:21:14

标签: python ruby list

在Ruby中:

[[1,2],[2,3],[9,3]].find_index {|i| i.include?(3)}

返回1,它是包含3的数组中第一个元素的索引。在Python中是否存在等价物?我查看了List的{​​{1}}方法,但它似乎没有将lambda作为参数。

2 个答案:

答案 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'