Python-any()-检查列表中的元素是否为

时间:2018-11-13 12:23:47

标签: python-3.x list

我正在开发一个程序,有时我必须检查是否 列表元素大于或等于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;

1 个答案:

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