any() 和 all() 函数的意外结果,以及如何将字符串读取为 false?

问题描述

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

v1=[True,False,True] # unexpected 2
v2=[True]              # wai
v3=[]                  # unexpected 2
v4=[False]             # wai
v5=[False,False]       # wai
v6=[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,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,True] )
any true: False | not all 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'] )

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

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

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

对我的惊喜做一些更详细的解释。我将“内部”语句称为 all(v)==False 并否定这是外部语句:

  • v1=[True,True] - 对于 inside 语句,我考虑是否所有元素都是 False。显然情况并非如此,因此我预计该陈述是错误的。外部 not 否定了这一点,因此结果应该是 True。
  • v3=[] - 该集合为空。因此所有元素都是假的就是真,而不是这应该是假的。
  • v6=[False,True] - 很明显有一些 True 元素,所以里面的语句是 False。不是这个,意味着它应该是 True。
  • v8=[float('nan'),False] - 这对我来说是个谜。我希望 'nan' 读作 False(只接受 True 值),但查看文档这不是它的工作原理。鉴于此信息,出乎意料的是第二个语句读取为 False,因为 'nan' 是一个“真实”值。所以所有元素都是 False 是一个错误的陈述,否定我希望输出为 True。
  • v9v10 在我了解“真实”值后按预期工作。但是,我希望他们在两种情况下都读取 False(仅将 1True 视为 True 值,其他视为 False)。我目前的项目特别关注的是阅读“nan”、“NaN”等。错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)