3小时入门Python——第三十五课any()和all()函数
到目前为止,您当然已经知道 Python 具有许多不同的内置函数,这些函数可以帮助开发人员更有效地工作。内置函数始终可用,因此您无需声明或导入它们。只需在需要时调用此函数。您已经看过其中一个功能,它是 print()
。今天,我们将学习另外两个内置函数 any()
,all()
并找出如何以及何时使用它们。
但是请注意,这些函数仅适用于可迭代对象,例如字符串和列表。名单是可迭代的,所以我们将用它来说明理论部分和展示如何 any()
和 all()
工作。
函数 any()
any()
函数调用的结果是布尔值:True
如果对可迭代对象中的一个元素或一组元素进行求值,则返回 boolean 值 True
。否则,返回 False
。让我们看一个例子。想象一下,您和您的朋友 Jam 和 Andy 编写了一个测试,并以 True
和 False
值的列表形式获得了结果。如果至少一个答案是正确的,则测试通过。现在,您需要检查您和您的朋友是否通过了该测试。
your_results = [True, False, False]
print(any(your_results)) # True
如您所知,该值 True
对应于 1,而 False
可以用 0 表示,因此,您可以将布尔值替换为上面列表中的数字值,并获得相同的结果。
your_results = [1, 0, 0]
print(any(your_results)) # True
实际上,除 0 以外的所有数字都将视为 True
,即使是负数也是如此。那部分源于 bool()函数的工作方式。
现在回到我们的测试示例,您通过了一个正确答案。那你的朋友,果酱和安迪呢?安迪还有其他要检查的结果列表。
andy_results = [False, False, False]
print(any(andy_results)) # False
不幸的是,你的朋友安迪失败了。那果酱呢?好吧,您的这个朋友根本没有编写测试,因此他得到了一个空的结果列表。
jam_results = []
print(any(jam_results)) # False
该列表不包含任何元素,并且由于找不到 True
值,因此该 any()
函数返回 False
。
那 any()
功能是做什么的呢?首先,它使用一个列表作为参数,然后评估该列表的所有元素以找到至少一个 True
(如果是),则返回 True
,否则结果为 False
。
函数 all()
该 all()
函数的工作原理很像 any()
。区别在于 all()
函数检查可迭代对象的所有元素是否都存在,True
然后返回 True
是否存在。否则,您得到 False
。您还记得我们检查测试结果的上一部分的故事吗?让我们继续。想象另一个测试,这次是最后一个测试。为了成功,您应该正确回答所有问题。这次您和您的两个朋友的情况如何?
your_results = [True, False, False]
print(all(your_results)) # False
如您所见,并非您的情况下的所有答案都是正确的,因此您没有通过测试。那么安迪的结果呢?
andy_results = [True, True, True]
print(all(andy_results)) # True
幸运的是,安迪过去了。果酱似乎正在休假。他的结果列表再次为空。
jam_results = []
print(all(jam_results)) # True
该列表不包含任何元素,但是该 all()
函数将返回,True
因为它将搜索任何 False
值。没有 False
值导致 True
。在这种情况下要小心。
非布尔值
请注意,any()
并且 all()
可以接受包含非布尔值的列表这一事实。让我们回想一下它们是如何评估的。
空序列(例如字符串和列表,以及零)等价于 False
,常数也是如此 None
。非空序列等效于 True
。
请注意,在 all()
空序列上调用函数的结果不同于将空序列转换为布尔值。的结果 all(list())
为 True
,结果 bool(list())
为 False
。
这是带有错误值的列表。any()
并且 all()
在此示例中将具有相同的行为:
rocket_science_scores = [0, -0, 0.0, +0]
any(rocket_science_scores) # False
all(rocket_science_scores) # False
现在,让我们看一些简单的主题的分数:
math_scores = [0, 1, 2, 3]
any(math_scores) # True
all(math_scores) # False
如图所示,all()
不返回 True
存在错误值的列表。考虑最后一种情况:
biology_scores = [1, 2, 3, 4]
any(biology_scores) # True
all(biology_scores) # True
该列表 biology_scores
没有错误值,这就是两个函数都导致的原因 True
。
另外,您可以通过比较将列表中的元素转换为布尔值。假设我们有一个分数列表,并想检查一些分数是否等于或大于 3。可以这样完成:
scores = [1, 2, 3, 4]
boolean_scores = [score >= 3 for score in scores] # [False, False, True, True]
print(any(boolean_scores)) # True
print(all(boolean_scores)) # False
然而,列表可能包含不同的元素,如字符串或嵌套列表,在这种情况下,行为 any()
和 all()
将在很大程度上依赖于内容。记在脑子里。
条件
编码人员经常在一定条件下使用 any()
和 all()
运行。它有助于快速检查可迭代对象的元素,并避免复杂的构造。
让我们为情人节选择一个糖果盒。每个盒子包含几种类型的糖果。但是您对每种类型的糖果的平均数量感兴趣,因为很显然,您将与您的情人分享它们。
box = [10, 20, 33]
if any([candy % 2 for candy in box]):
print("It is not a proper gift.")
else:
print("Perfect!")
简短而甜蜜,不是吗?生活就像一盒巧克力!只要您处理的值可以转换为 True
和 False
,就可以在条件中同时使用这两个函数。
总结一下
我们了解了功能 any()
和 all()
作用以及它们如何工作。如您所见,这些功能是一种有效的工具,可以帮助检查条件并可以提高代码的可读性。
标题:3小时入门Python——第三十五课any()和all()函数
作者:给我丶鼓励
地址:https://blog.doiduoyi.com/articles/1594214671845.html