提问人:amquack 提问时间:1/30/2021 更新时间:1/30/2021 访问量:44
any() 和 all() 函数的意外结果,如何将字符串读取为 false?[复制]
Unexpected results from any() and all() functions, and how do I read strings as false? [duplicate]
问:
这个问题在这里已经有答案了:
python 中的 all() 如何在空列表上工作 (5 个答案)
空列表上出现“全部”和“任何”结果的原因 (9 个答案)
所有比较都对 NaN 值返回 false IEEE754理由是什么? (12 个答案)
什么是真假?它与真与假有何不同? (8 个回答)
2年前关闭。
我正在测试 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),然后是计算值。这是对两个语句执行的,然后末尾的括号显示计算的列表。
我的大部分惊喜都来自这种组合。但我也期望非真值(例如:float('nan')或'random_string')是假的。查看文档,我发现情况并非如此,但我想知道如何将其作为一种选择。not all()
我试图对逻辑语句进行编码测试:“Is any True?”和“not: are all False?”。如果我没记错的话,这些在逻辑上应该是相同的。
对我的惊喜有一些更详细的解释。我把“内部”陈述称为外部陈述,并否定这一点:all(v)==False
v1=[True, False, True]
- 对于内部语句,我考虑是否所有元素都是 False。显然不是这样,所以我预计这种说法是错误的。外部否定了这一点,所以这个结果应该是 True。not
v3=[]
- 该集合是空的。因此,所有元素都是假的就是真,而不是这应该是假的。v6=[False,False, True]
- 很明显,有一些 True 元素,所以内部语句是 False。不是这样,意味着它应该是真的。v8=[float('nan'),False]
- 这对我来说是一个难题。我希望“nan”读作 False(只接受 True 值),但查看文档,这不是它的工作原理。根据这条信息,第二个语句读作 False 是出乎意料的,因为“nan”是一个“真实”值。所以所有元素都是 False 是一个错误的陈述,并且否定了我希望输出为 True。v9
一旦我了解了“真实”的价值观,就会按预期工作。但是,我希望它们在这两种情况下都读取 False(仅考虑 或作为 True 值,其他值为 False)。我目前的项目特别关注的是将“nan”、“NaN”等读作 False。v10
1
True
答: 暂无答案
评论
not(all(v)==False)
并不意味着“不全是假的”。同样是多余的,它意味着只是.any(v) == True
any(v)
nan
float
0.0
not all(not x for x in v)
any(v)
not(all(v)==False)
== False
v
all
all
not (....)
not (all(v) == False)
all(v)