Python and()和具有自定义条件的任意()

Python and()和具有自定义条件的任意(),python,Python,我试图找出Python中是否有任何内置工具以相同的方式工作并实现,但不必检查每个元素是否真实,而是可以传递自己的布尔求值函数或lambda,就像使用map()函数一样 所以我想问的是,是否有任何内置函数可以执行以下操作: from random import randint lst = [randint(1, 100) for _ in range(1000000)] has_even = any(lambda x: not x % 2, lst) 或 其中具有偶数\u fn将是一个检查整数是

我试图找出Python中是否有任何内置工具以相同的方式工作并实现,但不必检查每个元素是否真实,而是可以传递自己的布尔求值函数或lambda,就像使用
map()
函数一样

所以我想问的是,是否有任何内置函数可以执行以下操作:

from random import randint
lst = [randint(1, 100) for _ in range(1000000)]
has_even = any(lambda x: not x % 2, lst)

其中
具有偶数\u fn
将是一个检查整数是否为偶数的函数

您仍然可以使用
any()
检查
lst
是否有evens:

has_even = any([not x % 2 for x in lst])

但这当然是严格意义上的
O(n)
,因为必须首先构建整个布尔列表,而我要求的函数在最坏的情况下只能是
O(n)
,在最好的情况下可能是
O(1)

如注释中所述,您可以删除
[]
要获取惰性求值生成器表达式而不是急切列表,请执行以下操作:

contains_one_or_more_even = any(x % 2 == 0 for x in lst)


只需删除
all
any
中的
[]
,列表理解就会变成一个生成器表达式。这包括一些开销,但它并不急于转换整个列表。“但这当然是严格的O(n),因为必须首先构建整个布尔列表”,这是因为您选择在这里使用列表理解。您可以只使用生成器表达式:
any(不是lst中x的x%2)
您也可以只使用
map
<代码>任何(映射(lambda x:not x%2,lst))@PatrickHaugh仅在Python 3中使用。使用py2时,需要使用
itertools.imap
。我会接受任何一个生成表达式注释作为答案,它们正是我想要的。遗憾的是,我忽略了生成器表达式。
contains_one_or_more_even = any(x % 2 == 0 for x in lst)
contains_only_even = all(x % 2 == 0 for x in lst)