You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python内置函数all处理空字符串字符检查时返回True?

问题:空字符串传入all()为何返回True?

我编写了一个函数,用于检查给定字符串的每个字符是否都存在于指定列表ITEMS中。该函数在多数场景下表现正常,但当输入为空字符串时,内置函数all返回True,尽管空字符串并不在ITEMS列表内。

代码示例:

ITEMS = ['a', 'b', 'c', 'd']

def check_all_chars_are_in_list(string):
    return all(char in ITEMS for char in string)


if __name__ == "__main__":
    print(check_all_chars_are_in_list('saban'))   # False, as expected. (1)
    print(check_all_chars_are_in_list('abcd'))    # True, as expected.  (2)
    print(check_all_chars_are_in_list(''))        # True (why?).        (3) 

我手动测试空字符串是否在列表中得到False:

>>> st = ''
>>> l = ['a', 'b', 'c', 'd']
>>> st in l
False        # As expected
原因解释

这是Python中all()函数的**空真值(vacuous truth)**特性导致的。

all(iterable)的核心逻辑是:如果可迭代对象中的所有元素都为True,返回True;如果可迭代对象是空的(没有任何元素),同样返回True——因为不存在任何违反“所有元素为真”的情况。

你的函数里,传入空字符串时,for char in string会生成一个空生成器,没有任何字符需要检查。此时all()直接触发空真值规则,返回True。

你手动测试的st in l是判断空字符串这个整体是否属于列表元素,和函数逻辑完全不同:函数是验证字符串的每个字符都在列表中,空字符串没有字符需要验证,所以all()默认返回True。

如果要让空字符串输入返回False,可以修改函数,先判断字符串是否非空:

def check_all_chars_are_in_list(string):
    return bool(string) and all(char in ITEMS for char in string)

内容的提问来源于stack exchange,提问作者Luiz Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:22:11