Python从列表列表中选择一项

Python从列表列表中选择一项,python,list,list-comprehension,Python,List,List Comprehension,我有一个列表列表,并将对其进行搜索,这将只产生一个结果。下面的代码可以工作,但不是直观的,因为它并没有真正表达我要做的事情的意图。。。看起来我正试图返回一个列表,只是碰巧想要返回最后一个列表中的第一个项目:这不是真的,因为我总是只想要一个项目,而不是一个列表。还有更直观的吗 game = [g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I)][0] 您可以显式地将该列表的第一个元素分配给变量游戏。这就更清楚了 您

我有一个列表列表,并将对其进行搜索,这将只产生一个结果。下面的代码可以工作,但不是直观的,因为它并没有真正表达我要做的事情的意图。。。看起来我正试图返回一个列表,只是碰巧想要返回最后一个列表中的第一个项目:这不是真的,因为我总是只想要一个项目,而不是一个列表。还有更直观的吗

game = [g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I)][0]
您可以显式地将该列表的第一个元素分配给变量游戏。这就更清楚了


您可以显式地将该列表的第一个元素分配给变量游戏。这就更清楚了。

遗憾的是,Python中没有内置的方法来使用帮助函数在列表中搜索

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

game = next(g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I))
或者更具功能性的方法(这与Python2.x上的方法不同,因为它生成整个列表,并且不会在第一个匹配元素处停止。在Python3.x上,filter返回一个迭代器,行为相同)


过滤器是否清晰是一个偏好问题。BDFL更喜欢理解tho。

遗憾的是,Python中没有内置的方法来使用helper函数在列表中搜索

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

game = next(g for g in games if g.num==5 and re.search("ucla", g.a_name, re.I))
或者更具功能性的方法(这与Python2.x上的方法不同,因为它生成整个列表,并且不会在第一个匹配元素处停止。在Python3.x上,filter返回一个迭代器,行为相同)


过滤器是否清晰是一个偏好问题。BDFL更倾向于理解tho。

可能的重复也是关于这个主题:可能的重复也是关于这个主题:在Python2.x中,filter首先构建一个列表,它在找到第一个匹配后做了太多的工作。在Python2.x中,filter首先构建一个列表,它在找到第一个匹配后做了太多的工作。
game = next(filter(lambda g: g.num==5 and re.search("ucla", g.a_name, re.I), games))