我想在找到第一个True时停止迭代,如下所示:
>> for x in ['a', 'b', 1, 2, 3]:
>> if isinstance(x, int):
>> print(x)
>> break
1
除了[ for循环外,我该怎么做?
any
,可用于确定if此类元素是否存在,但不会告诉您它是什么元素。
any
幸运的是,any(isinstance(x, int) for x in ['a', 'b', 1, 2, 3])
为您要对列表或任何其他可迭代对象执行某些操作提供了多种功能。您要查找的函数未内置在模块中,但是文档提供了一些函数的定义,包括
itertools
在内。您需要的功能命名为itertools
。只需复制定义,然后:
如果列表中没有与谓词匹配的内容,则first_true
将返回def first_true(iterabe, default=False, pred=None): return next(filter(pred, iterable), default) x = first_true(['a', 'b', 1, 2, 3], pred=int.__instancecheck__)
。如果需要其他行为,则可以修改该功能。如果您想了解如何使用itertools样式的迭代器,其他食谱可能是一个不错的起点。
但是,如果您要在循环中进行比查找第一个匹配元素还要复杂的处理,最好使用适当的first_true
循环。列表推导和生成器表达式可以很好地替代map和filter,并且itertools提供了对iterables的更多常规操作,但它们并不代表真正的循环逻辑。
False
返回第一个for
实例:next
第二个参数是一个返回值,使您可以避免True
错误