Python从列表列表中选择一个项目

时间:2013-09-26 09:53:09

标签: python list list-comprehension

我有一个列表列表,并将对其进行搜索,这将只产生一个结果。以下代码有效但不直观,因为它并没有真正表达我正在尝试做的意图......看起来我正在尝试返回一个列表,而恰好想要返回第一个最后的项目:这不是真的,因为我总是只想要一个项目,而不是列表。这里有什么更直观的吗?

game = [g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I)][0]

2 个答案:

答案 0 :(得分:3)

可悲的是,Python中没有内置方法可以使用辅助函数在列表中进行搜索。

但是,您可以使用生成器表达式并使其在第一次匹配时停止,而不是迭代剩余列表,即使已找到匹配项也是如此。

game = next(g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I))

或许更多功能方法(这不等同于Python 2.x上的前一个方法,因为它生成整个列表,并且不会停留在第一个匹配元素上。在Python 3.x上{{1}返回迭代器,行为相同)。

filter

过滤器是否更清晰是一个优先选择问题。 BDFL更喜欢理解。

答案 1 :(得分:1)

list_games = [g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I)]
game = list_games[0]

您可以明确地将该列表的第一个元素分配给您的变量游戏。这使它更清晰。