Python 对于负数列表,any() 函数未按预期运行

Python any() function does not act as expected for list of negative numbers

我正在尝试将 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 转换为浮点数也无济于事。在阅读 "truth value testing", this post 并花费大量时间尝试了解我的程序中的行为之后,我不知所措。请帮忙,我是 python 的新手。谢谢!

你比较错了。您正在将任何 的 结果与 1 进行比较。

如果列表中的任何元素非零,

any(mylist) 将 return 为真。 True 大于或等于 1.

所以这个

any(mylist)>=1

等同于

any(mylist)

你的意思是

any(x>=1 for x in mylist)

请阅读documentation:

any(iterable)

Return True if any element of the iterable is true. If the iterable is empty, return False. Equivalent to:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

列出的所有 any() 表达式将 return True,并且您正在将 True 与 1 进行比较,即 True