3小时入门Python——第三十五课any()和all()函数

  |   0 评论   |   0 浏览   |   给我丶鼓励

到目前为止,您当然已经知道 Python 具有许多不同的内置函数,这些函数可以帮助开发人员更有效地工作。内置函数始终可用,因此您无需声明或导入它们。只需在需要时调用此函数。您已经看过其中一个功能,它是 print()。今天,我们将学习另外两个内置函数 any()all() 并找出如何以及何时使用它们。

但是请注意,这些函数仅适用于可迭代对象,例如字符串和列表。名单是可迭代的,所以我们将用它来说明理论部分和展示如何 any()all() 工作。

函数 any()

any() 函数调用的结果是布尔值:True 如果对可迭代对象中的一个元素或一组元素进行求值,则返回 boolean 值 True。否则,返回 False。让我们看一个例子。想象一下,您和您的朋友 Jam 和 Andy 编写了一个测试,并以 TrueFalse 值的列表形式获得了结果。如果至少一个答案是正确的,则测试通过。现在,您需要检查您和您的朋友是否通过了该测试。

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!")

简短而甜蜜,不是吗?生活就像一盒巧克力!只要您处理的值可以转换为 TrueFalse,就可以在条件中同时使用这两个函数。

总结一下

我们了解了功能 any()all() 作用以及它们如何工作。如您所见,这些功能是一种有效的工具,可以帮助检查条件并可以提高代码的可读性。


标题:3小时入门Python——第三十五课any()和all()函数
作者:给我丶鼓励
地址:https://blog.doiduoyi.com/articles/1594214671845.html

评论

发表评论