繁体   English   中英

试图理解“any([comprehension])”和“any(comprehension)”之间的区别

[英]Trying to understand the difference between "any([comprehension])" and "any(comprehension)"

有什么区别:

if any([value % 2 for value in values]):
    print('done')

if any(value % 2 for value in values):
    print('done')

其中 values 是 0-20 的数组?

我知道any()检查数组中的任何值是否符合要求,但想知道函数之间是否有任何区别。

第一个首先计算整个列表,然后应用any 另一方面,第二个是“懒惰的”; 如果某个元素为真,则any立即返回True ,无需进一步处理。

def foo(x):
    print(f"foo({x}) is called!")
    return x >= 5

print(any([foo(x) for x in range(10)]))
# foo(0) is called!
# foo(1) is called!
# foo(2) is called!
# foo(3) is called!
# foo(4) is called!
# foo(5) is called!
# foo(6) is called!
# foo(7) is called!
# foo(8) is called!
# foo(9) is called!
# True

print(any(foo(x) for x in range(10)))
# foo(0) is called!
# foo(1) is called!
# foo(2) is called!
# foo(3) is called!
# foo(4) is called!
# foo(5) is called!
# True

如您所见,第二个不评估foo(x)x > 5 ,因为any已经找到foo(5) == True ,这足以说明结果为True

两者之间的区别在于,第一个从只要values构造一个临时列表,然后将其传递给any() (然后将其删除)。 第二种是使用所谓的生成器表达式,它将根据需要迭代计算和生成,并将它们传递给any() 由于any()的工作方式,它可能会在到达结束之前停止执行此操作,因为条件已满足。 对于非常大的数据集,后者将需要更少的 memory 来完成(如果它“提前”停止,则可能需要更少的处理器时间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM