Python如何用next()实现迭代器匹配返回值、无匹配返回None的单行写法
解决方案
next() 内置函数本身支持传入第二个参数作为迭代器耗尽时的默认返回值,直接修改代码如下即可:
def my_func(some_iter): return next(('yes' for x in some_iter if x%2 == 0), None)
验证效果
测试你给出的用例:
some_list1 = [1, 2, 3, 4] some_list2 = [1, 7, 3, 5] print(my_func(some_list1)) # 输出 yes print(my_func(some_list2)) # 输出 None
说明
- 原写法报错的原因是没有给
next()指定默认返回值,当生成器('yes' for x in some_iter if x%2 == 0)没有符合条件的元素时,会直接抛出StopIteration异常 - 新增的第二个参数
None会在迭代器耗尽时直接返回,不会触发异常 - 整个逻辑仍然是单次遍历,找到第一个符合条件的元素就立即返回,不会遍历整个迭代器,性能和原写法一致
内容的提问来源于stack exchange,提问作者Niewasz Biznes
相关产品推荐
相关产品推荐

