我正在尝试将 if 语句中的数字列表与 any() 函数进行比较。我在 Spyder 中使用 python 3.6。有问题的代码是:
if any(lst) >= 1:
do_some_stuff
lst 实际上是由 list(map(my_func, other_lst))
生成的,但是在诊断我的问题之后,我得到了如下所示的两种行为,其中我的实际 lst 传递给了 any() 函数:
any([1.535, 1.535, 1.535]) >= 1
>>True
这是预期的。
any([-0.676, -0.676, -0.676]) >= 1
>>True
这是不预期的。
我进行了更深入的研究,发现我可以在 lst 中放入小于 0 的任何数字,在 if 语句中都会产生 True
。此外,将 1 转换为 float 也没有帮助。看完"truth value testing" , this post ,并花费大量时间尝试学习程序中的行为,我不知所措。请帮忙,我对 python 很陌生。谢谢!
最佳答案
你比较的是错误的东西。您正在将任意结果与 1 进行比较。
如果列表中的任何元素非零,any(mylist)
将返回 true。 True 大于或等于 1。
所以这个
any(mylist)>=1
相当于只是
any(mylist)
你的意思是
any(x>=1 for x in mylist)
关于Python any() 函数对于负数列表没有按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48956406/