2024-04-25 09:41:11 发布
网友
当我发现第一个是真的时,我想停止迭代,如下所示:
>> for x in ['a', 'b', 1, 2, 3]: >> if isinstance(x, int): >> print(x) >> break 1
除了使用列表理解for循环,我如何做同样的事情?在
不幸的是,没有内置机制来查找与谓词匹配的列表的第一个元素。有一个^{},你可以用它来确定是否存在这样一个元素,但这不会告诉你它是什么元素。在
any(isinstance(x, int) for x in ['a', 'b', 1, 2, 3])
幸运的是,^{}提供了多种函数,用于在列表或任何其他iterable上执行操作。在
您要查找的函数不是内置于模块中的,但是文档提供了一些函数的定义,包括这个函数,如itertools recipes。您需要的函数名为first_true。复制定义,然后:
first_true
如果列表中没有与谓词匹配的内容,first_true将返回False。如果需要不同的行为,可以修改函数。如果您想了解如何使用itertools样式的迭代器,那么其他方法可能是一个很好的起点。在
False
但是,如果您试图在循环中进行比查找第一个匹配元素更复杂的处理,那么最好使用适当的for循环。列表理解和生成器表达式可以很好地替代map和filter,itertools在iterables上提供了更一般的操作,但它们并不代表真正的循环逻辑。在
for
可以在生成器表达式上使用next返回第一个True实例:
next
True
x = next((a for a in ['a', 'b', 1, 2, 3] if isinstance(a, int)), None) print(x) 1 x = next((a for a in ['a', 'b'] if isinstance(a, int)), None) print(x) None
其中第二个参数是一个返回值,它允许您避免StopIteration错误
StopIteration
这可以简化为filter运算符,如上面的itertools配方所示:
filter
不幸的是,没有内置机制来查找与谓词匹配的列表的第一个元素。有一个^{} ,你可以用它来确定是否存在这样一个元素,但这不会告诉你它是什么元素。在
幸运的是,^{} 提供了多种函数,用于在列表或任何其他iterable上执行操作。在
您要查找的函数不是内置于模块中的,但是文档提供了一些函数的定义,包括这个函数,如itertools recipes。您需要的函数名为
^{pr2}$first_true
。复制定义,然后:如果列表中没有与谓词匹配的内容,
first_true
将返回False
。如果需要不同的行为,可以修改函数。如果您想了解如何使用itertools样式的迭代器,那么其他方法可能是一个很好的起点。在但是,如果您试图在循环中进行比查找第一个匹配元素更复杂的处理,那么最好使用适当的
for
循环。列表理解和生成器表达式可以很好地替代map和filter,itertools在iterables上提供了更一般的操作,但它们并不代表真正的循环逻辑。在可以在生成器表达式上使用
next
返回第一个True
实例:其中第二个参数是一个返回值,它允许您避免
StopIteration
错误编辑(credit@martineau)
这可以简化为
^{pr2}$filter
运算符,如上面的itertools配方所示:相关问题 更多 >
编程相关推荐