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
。
我正在尝试将 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
。