首页 > 解决方案 > 来自 any() 和 all() 函数的意外结果,以及如何将字符串读取为假?

问题描述

我正在测试 all() 和 any() 函数以确保我了解它们的操作方式。原来我不理解他们。这是我的测试代码:

v1=[True, False, True] # unexpected 2
v2=[True]              # wai
v3=[]                  # unexpected 2
v4=[False]             # wai
v5=[False,False]       # wai
v6=[False,False, True] # unexpected 2
v7=[False]*4           # wai
v8=[float('nan'),False]# unexpected 1, but I think this is because any() considers "truthy" values. Given this, 2 is unexpected.
v9=['f','t']           # wai, given "truthy" values. Would like this to return False.
v10=['random_string']  # same as above
vlist=[v1,v2,v3,v4,v5,v6,v7,v8,v9,v10]

for v in vlist:
    print('any true:',any(v)==True,'| not all false:',not(all(v)==False),'(',v,')')

回报:

any true: True | not all false: False ( [True, False, True] )
any true: True | not all false: True ( [True] )
any true: False | not all false: True ( [] )
any true: False | not all false: False ( [False] )
any true: False | not all false: False ( [False, False] )
any true: True | not all false: False ( [False, False, True] )
any true: False | not all false: False ( [False, False, False, False] )
any true: True | not all false: False ( [nan, False] )
any true: True | not all false: True ( ['f', 't'] )
any true: True | not all false: True ( ['random_string'] )

我对输出进行了编码以显示语句的逻辑摘要(例如:任何 true),然后是评估值。这对两个语句都完成了,然后最后的括号显示评估的列表。

我的大部分惊喜都来自于这种not all()组合。但我也期望非真值(例如:float('nan') 或 'random_string')为假。查看文档,我发现情况并非如此,但我想知道如何使它成为一个选项。

我试图为逻辑语句编写测试代码:“是真的吗?” 和“不是:都是假的?”。如果我没记错的话,这些在逻辑上应该是相同的。

一些更详细的解释我的惊喜。我将“内部”声明称为all(v)==False外部声明,并否定它:

标签: pythonbooleanlogical-operatorsboolean-logic

解决方案


推荐阅读