gpt4 book ai didi

python - 从匹配条件的迭代中获取第一个项目

转载 作者:IT老高 更新时间:2023-10-28 12:11:04 25 4
gpt4 key购买 nike

我想从符合条件的列表中获取第一项。重要的是,生成的方法不处理整个列表,这可能非常大。例如,下面的函数就足够了:

def first(the_iterable, condition = lambda x: True):
for i in the_iterable:
if condition(i):
return i

这个函数可以这样使用:

>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4

但是,我想不出一个好的内置/单线让我这样做。如果不需要的话,我并不特别想复制这个功能。是否有内置方法可以获取第一个匹配条件的项目?

最佳答案

Python 2.6+ 和 Python 3:

如果您希望在未找到匹配元素的情况下引发 StopIteration:

next(x for x in the_iterable if x > 3)

如果您希望返回 default_value(例如 None):

next((x for x in the_iterable if x > 3), default_value)

请注意,在这种情况下,您需要在生成器表达式周围添加一对额外的括号 - 只要生成器表达式不是唯一的参数,就需要它们。

我看到大多数答案坚决忽略next内置的,所以我假设出于某种神秘的原因,他们 100% 专注于 2.5 和更早的版本——没有提到 Python 版本问题(但我没有在 的答案中看到提到 提到内置的 next,这就是为什么我认为有必要自己提供一个答案——至少“正确版本”问题以这种方式记录下来;-)。

Python <= 2.5

.next()如果迭代器立即完成,迭代器的方法会立即引发 StopIteration - 即,对于您的用例,如果迭代器中没有项目满足条件。如果您不在乎(即,您知道 必须 至少有一个令人满意的项目),那么只需使用 .next() (最好在 genexp 上,行next 在 Python 2.6 及更高版本中内置)。

如果您确实在乎,最好按照您在 Q 中首先指出的那样将东西包装在一个函数中,虽然您提出的函数实现很好,但您也可以使用 itertools ,一个 for...: break 循环,或一个 genexp,或一个 try/except StopIteration 作为函数的主体,正如各种答案所建议的那样。这些替代方案中的任何一个都没有太多附加值,所以我会选择您最初提出的极其简单的版本。

关于python - 从匹配条件的迭代中获取第一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com