Python 从列表列表中选择一项

标签 python list list-comprehension

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

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))

或者可能是更实用的方法(这与 Python 2.x 上的前一个方法不同,因为它生成整个列表,并且不会在第一个匹配元素处停止。在 Python 3.x filter 上 返回一个迭代器,行为是相同的)。

game = next(filter(lambda g: g.num==5 and re.search("ucla", g.a_name, re.I), games))

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

关于Python 从列表列表中选择一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19025002/

相关文章:

python - 数据帧操作和合并Python

python - 在 Pandas 的查询中使用动态列表

python BeautifulSoup解析表

mysql - r 从 mysql db 循环中获取数据

python - 如何检查列表中是否出现两个列表项的任意组合

python - 将 psql 类型 oid 映射到 python 类型 - 使用 psycopg2

python - Python 的 list.remove(value) 如何确定要删除的值?

arrays - 使用outer生成列表数组

python - python嵌套循环中的列表理解

python - 增加列表理解的值(value)限制