Python 内置的 any(x) 函数接受一个可迭代的元素 x 作为参数,如 list、元组或字典。如果在iterable中至少有一个元素使用隐式布尔转换计算为True,它返回True,否则返回False。如果iterable是空的,例如,any([]),它返回False,因为任何元素都不满足条件。 |
list 的any()函数举例
下面的代码显示了如何在不同的列表上使用any()函数。
# 布尔型列表,含假值 False
print(any([True, False, True, True]))
# True
# 没有False值的布尔列表
print(any([True, True]))
# True
# 包含0值的整数列表
print(any([1, 2, -1, 0]))
# True
# 不含0值的整数列表
print(any([1, 2, -1]))
# True
# 嵌套式列表,内部为空列表
print(any([[], [1, 2, 3]]))
# True
# 嵌套列表,有两个空的内部列表
print(any([[], []]))
# False
# 空列表
print(any([]))
# False
元组Tuples的any()函数举例
如果你在元组上使用any()函数,它将返回一个布尔值,表示所有元组元素是否都计算为True。
print(any((1, 2, 3)))
# True
print(any((0, 0, 0)))
# False
print(any((False, 2==3, -1)))
# True
print(any((True, 3, 1!=1)))
# True
字典的any()函数举例
字典上的any()函数检查 keys(而不是values)的迭代,是否至少有一个 keys 的值为True,如果是,返回值为True,否则为False。否则为False。
d = {'': 10000,
0: 5000,
tuple(): 0}
print(any(d))
# False
d['x'] = 100000
print(any(d))
# True
进阶知识点
短路优化
根据Python的官方文档,该any()函数在语义上等效于以下代码片段:
def any(iterable):
for element in iterable:
if element:
return True
return False
因此,它将遍历迭代表中的所有元素,并使用元素作为if条件来检查它的值是True还是False,一旦检测到一个True元素,它就会中止循环并返回True。这是一种叫做短路的优化,它意味着只对第一个True值进行评估!
带For循环的Python any()函数
你也可以使用生成器表达式动态地创建一个迭代,并将其传递到 any() 函数中。这可以称为 “带有for循环的any()函数”。
print(any(x**2 == 16 for x in range(10)))
# True
上面举例代码使用的条件是x**2==16,它只对x=4有效。当你通过使用range()函数将这个表达式应用于从0到9(包括)的所有x值时,它大多返回False。由于短路,any()函数在评估第五个元素x=4后返回True。
最后
希望阅读完整篇文章后,你可以轻松地运用python any()内置函数
请订阅并继续关注,以后会收到更多有趣的文章。
本文为“一个火星程序员”原创文章,转载请标明出处
原文链接:https://blog.csdn.net/machial/article/details/110679408