翻译Ruby。我如何在Python中执行此操作?

时间:2014-07-25 15:23:05

标签: python ruby code-translation

我想在列表中找到这样的特定元素:

my_list.find { |e| e == 'find this' }

我在Python中知道我能做到:

[e for e in my_list if e == 'find this']

但是这会返回一个列表而不是我想要的元素。

我知道如何通过遍历列表来实现这一点,但我想知道是否有更简洁的方法。

2 个答案:

答案 0 :(得分:2)

你可以找到带有生成器表达式的第一个匹配元素和next()

match = next((e for e in my_list if e == 'find this'), None)

如果没有匹配的元素,则会将match设置为None

因为使用了生成器表达式,所以只检查my_list中的足够元素以找到第一个匹配项,然后停止搜索。

您提供的示例搜索当然是毫无意义的,因为您基本上使用简单的相等。对于更复杂的属性搜索,它更有意义。

答案 1 :(得分:0)

您可以使用list.index

  

返回值为x的第一个项目列表中的索引。如果没有这样的项目,则会出错。

>>> l = ["1", "se", "uz", "tz", "find this", "that"]
>>> l.index("find this") 
4

>>> l[l.index("find this")]
'find this'

>>> l[l.index("find that")]
...
ValueError: 'find that' is not in list

如果您的所有应用都在搜索完全键,您也可以使用字典(在Ruby中称为Hash,而不是) - 从O(n)减少查找时间)摊销O(1)。