Python any()函数对负数列表没有预期的作用

时间:2018-02-23 21:22:39

标签: python python-3.x any

我试图将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很新。谢谢!

2 个答案:

答案 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