我想在列表中找到这样的特定元素:
my_list.find { |e| e == 'find this' }
我在Python中知道我能做到:
[e for e in my_list if e == 'find this']
但是这会返回一个列表而不是我想要的元素。
我知道如何通过遍历列表来实现这一点,但我想知道是否有更简洁的方法。
答案 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)。