我正在开发一个程序,有时我必须检查是否 列表元素大于或等于0。列表元素始终是整数。
a = [0]
在某些情况下,列表仅包含一个等于== 0的整数:
在这种情况下,我需要True
作为此支票的返回值。
我认为我可以为此目的使用any()。
print(any(i for i in a if i >= 0))
但是any()
返回False
。但是,如果我扩展列表,any()
返回True
。
a = [0, 1]
print(any(i for i in a if i >= 0))
True
我找到了解决此问题的方法,但我想知道为什么
只要列表包含一个元素,any()
就会返回False
。
for i in a:
if i >= 0:
print('True')
break;
答案 0 :(得分:3)
您正在过滤输入列表,然后要求KeyManager
测试过滤后的值。对于any()
,过滤后的序列仍然是[0]
(尽管是生成的序列,而不是实际列表),并且您要询问这些值中的任何一个是否为true。 [0]
是 false值,因此0
返回false:
any()
将测试放在生成器表达式的前面:
>>> a = [0]
>>> genexpr = (i for i in a if i >= 0)
>>> list(genexpr)
[0]
>>> bool(0)
False
>>> any(i for i in a if i >= 0)
False
该表达式不过滤,而是生成一系列布尔值,如果测试不通过,则生成any(i >= 0 for i in a)
,如果测试不通过,则生成False
。对于True
,这会产生一个具有单个[0]
值的序列,因此True
返回any()
:
True