python - 来自 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
外部声明,并否定它:
v1=[True, False, True]
- 对于 inside 语句,我考虑是否所有元素都是 False。显然情况并非如此,所以我预计该陈述是错误的。外界not
否定了这个,所以这个结果应该是True。v3=[]
- 集合是空的。因此所有元素都是假的就是真,而不是这应该是假的。v6=[False,False, True]
- 很明显有一些 True 元素,所以里面的陈述是 False。不是这个,意味着它应该是真实的。v8=[float('nan'),False]
- 这对我来说是一个谜。我希望 'nan' 读为 False(只接受 True 值),但是查看文档并不是它的工作原理。鉴于这条信息,第二条语句读取为 False 是出乎意料的,因为 'nan' 是一个“真实”值。所以所有元素都是 False 是一个错误的陈述,并且否定我希望输出为 True。v9
v10
一旦我了解了“真实”的价值观,就会按预期工作。但是,我希望他们在两种情况下都阅读 False(仅考虑1
或True
作为 True 值,其他情况下为 False)。我目前的项目特别关注的是阅读'nan','NaN'等。作为假。
解决方案
推荐阅读
- javascript - Firebase hitcounter:命中显示但不会增加
- android - 如何在命令行上使用 lldb 调试 Android 上的 C++ 代码
- php - 如何从 Symfony3 中提交的表单中获取数据?
- sql-server - 有没有办法将 .sqlproj 添加到 SSMS 解决方案资源管理器?
- reactjs - 为什么这个 JSX 中有一个随机空间?
- mysql - 如何登录 Mariadb?
- html - 如何在 Safari 中显示 OpenSearch 建议?
- nhibernate - NHibernate:无法调用 QueryOver
().List() 来自 IronPython - android - android ConstraintLayoutStates - 如何获取对 constraintLayoutStates 对象的引用?
- android - Android 应用程序 GUI - 是否可以嵌套 LinearLayout?