Python all和any函数对空列表的返回值

Python的all()和any()函数用于检查可遍历对象中的元素状态。all()在空列表中返回True,因为它检查所有元素是否为真;any()在空列表中返回False,因为没有元素需要验证。这种行为在递归函数实现中特别有用,但使用时需注意避免对空序列的漏检问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python有一对内置的函数: all()any(),他们两个都接收可遍历的对象(iterable, 也就是列表list、元组tuple之类的),all检查所有元素是否全都为真,any检查至少有一个元素为真。

他们的定义是:

all(iterable)
Return True if all elements of the iterable are true (or if the iterable is empty).

any(iterable)
Return True if any element of the iterable is true. If the iterable is empty, return False.

从定义可以看出,如果把一个空列表传给any,会得到false的结果,这个容易理解,因为里面没有任何一个元素是真的。但是如果把一个空列表传给all,会得到True,这个似乎不能显而易见。

分析

其实,这个问题可以这么理解:any是“或”运算,验证至少一个元素为真,如果对a到z 26个变量做“或”运算,下列等式应该成立,+号表示或:

any(a, b, c, ..., z) 
= a + any(b, c, ..., z)
= a + b + any(c, ..., z)
= ...
= a + b + c + ... + z + any([])

为了保证等式成立,必须使any([])为False,否则any的结果永远为True

对等地,all是与运算,验证全部元素为真,*号表示“与”运算:

all(a, b, c, ..., z) 
= a * any(b, c, ..., z)
= a * b * any(c, ..., z)
= ...
= a * b * c * ... * z * all([])

为了保证等式成立,必须使all([])为True,否则all的结果永远为False

这两个逻辑在写递归函数时就很有用,可以参考Python 实现递归生成器

all的陷阱

all函数的这种特性产生了一个后果:当检查一个序列都是真值时,必须先检查非空,不然可能会漏过空序列:

if matched and all(matched):
    # do something...

原文链接:http://www.lfhacks.com/tech/python-all-any-empty-list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值