我试图将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
不预期。
我已经深入研究了一下,发现我可以放入任何小于0的数字在我的if语句中产生True
。此外,将1转换为浮点数并没有帮助。在阅读"truth value testing",this post以及尝试了解我的计划中的行为的大量时间之后,我感到很茫然。请帮忙,我对python很新。谢谢!
答案 0 :(得分:1)
你正在比较错误的东西。您正在将任何的结果与1.
进行比较 如果列表中的任何元素非零,则 any(mylist)
将返回true。 True大于或等于1.
所以这个
any(mylist)>=1
等同于
any(mylist)
你的意思是
any(x>=1 for x in mylist)
答案 1 :(得分:1)
请阅读documentation:
任何(可迭代的)
如果iterable的任何元素为true,则返回True。如果 iterable为空,返回False。相当于:
def any(iterable): for element in iterable: if element: return True return False
列出的所有any()
表达式都将返回True
,您将True
与1进行比较,即True
。