如何在 Python 中使用 all、any、max 和 min 函数

作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。

介绍

Python 包括许多内置函数——这些是全局 Python 函数,可以从任何 Python 代码调用,而无需导入其他模块。例如,您始终可以调用print内置函数来输出文本。

几个内置函数(allanymaxmin其中)值的可迭代对象作为它们的参数并返回单个值。一个可迭代对象是一个可以“迭代”的 Python 对象,也就是说,它将按顺序返回项目,以便您可以在for循环中使用它例如,当您想要确定列表中的所有或任何元素是否满足特定条件,或者查找列表中的最大或最小元素时,内置函数非常有用。

在本教程中,您将使用内置的功能allanymax,和min

先决条件

为了充分利用本教程,建议您拥有:

使用 all

内置函数all检查迭代中的每个元素是否都是True例如:

all([True, True])

如果您运行前面的代码,您将收到以下输出:

Output
True

在第一个示例中,您调用all并为其提供一个包含两个元素(两个True布尔值)的列表。由于迭代中的每个元素都是True,因此输出是True

all将返回False在给定的迭代,如果一个或多个元素是False

all([True, False, True])

如果您运行前面的代码,您将收到以下输出:

Output
False

all使用包含三个元素(包括一个False布尔值)的列表进行调用由于可迭代对象中的一个元素是False,因此调用的输出allFalse

值得注意的是,一旦遇到迭代中的第一个条目,all停止迭代并立即返回因此,如果您想检查可能相互建立的连续条件,但在一个条件为 时立即返回,这会很有用FalseFalseallFalse

需要注意的一个特殊情况是何时all给出一个空的可迭代对象:

all([])

如果您运行前面的代码,您将收到以下输出:

Output
True

当您给出all一个空的可迭代对象(例如,像 的空列表all([]))时,其返回值为True因此,如果迭代中的每个元素都为 True 或有 0 个元素,则all返回True

all与生成器和自定义条件结合使用时特别有用。使用all通常比编写完整的for循环更短更简洁让我们考虑一个例子来找出列表中是否有以 开头的元素"s"

animals = ["shark", "seal", "sea urchin"]
all(a.startswith("s") for a in animals)

如果您运行前面的代码,您将收到以下输出:

Output
True

all使用生成器作为参数调用。生成器animals根据动物是否以字母开头列表中的每个元素生成一个布尔值s最终的返回值是True因为animals列表中的每个元素都s.

注意:您通常可以使用Generator 表达式代替列表推导式作为节省内存的一种方式。例如,考虑all(i < 8 for i in range(3))all([i < 8 for i in range(3)])两个语句都返回,True因为 0, 1, 2 都小于 8。 但是,第二个示例(使用列表推导式)增加了隐式创建三个条目 long ( [True, True, True]) 列表然后将该列表传递给all函数的开销. 相比之下,第一个示例(使用生成器表达式)将生成器对象传递给all函数,all函数直接对其进行迭代,而没有中间列表的开销。

考虑到使用完整for循环编写的等效代码会更加冗长:

animals = ["shark", "seal", "sea urchin"]

def all_animals_start_with_s(animals):
    for a in animals:
        if not a.startswith("s"):
            return False
    return True

print(all_animals_start_with_s(animals))

如果没有all,用于确定是否所有动物都以字母开头的代码s需要多几行才能实现。

接下来,您将看到的同级功能allany

使用 any

您可以使用内置函数any检查可迭代对象中的任何元素是否为True例如:

any([False, True])

如果您运行前面的代码,您将收到以下输出:

Output
True

您调用any并为其提供一个包含两个元素(一个False布尔值和一个True布尔值)的列表。由于迭代中的一个或多个元素是True,因此输出也是True

any将返回False,当且仅当在元素0给定的迭代是True

all([False, False, False])

如果您运行前面的代码,您将收到以下输出:

Output
False

any使用包含三个元素(所有False布尔值)的列表进行调用由于可迭代对象中有 0 个元素是True,因此调用的输出anyFalse

值得注意的是,一旦遇到迭代中的第一个条目,any停止迭代并立即返回因此,如果您想检查连续的条件,但只要一个条件为 ,就立即返回,这可能很有用TrueTrueanyTrue

any– 就像它的兄弟方法一样all– 在与生成器和自定义条件(代替完整for循环)结合使用时特别有用让我们考虑一个例子来找出列表中是否有以 结尾的元素"urchin"

animals = ["shark", "seal", "sea urchin"]
any(s.endswith("urchin") for s in animals)

您将收到此输出:

Output
True

any使用生成器作为参数调用。生成器animals根据动物是否以 结尾列表中的每个元素生成一个布尔值urchin最终的返回值是True因为animals列表中的一个元素urchin.

注意:any给定一个空的可迭代对象(例如,像 一样的空列表any([]))时,其返回值为False因此,any收益False是否有在迭代0元素或所有元素的迭代器也False

接下来,您将查看另一个内置函数:max.

使用 max

内置函数max返回其参数中给出的最大元素。例如:

max([0, 8, 3, 1])

max给出一个带有四个整数作为参数的列表。的返回值max是该列表中最大的元素:8

输出如下:

Output
8

如果给定两个或多个位置参数(而不是带有可迭代的单个位置参数),则max返回给定参数中最大的一个:

max(1, -1, 3)

如果您运行前面的代码,您将收到以下输出:

Output
3

max给出三个单独的参数,其中最大的是3因此,调用的返回值max3

就像anyand一样allmax特别有用,因为与编写为完整for循环的等效代码相比,它需要使用更少的行

max还可以处理比数字更复杂的对象。例如,您可以max在程序中使用字典或其他自定义对象。max可以通过使用其名为 的关键字参数来容纳这些对象key

您可以使用key关键字参数来定义一个自定义函数,该函数确定比较中使用的值以确定最大值。例如:

entries = [{"id": 9}, {"id": 17}, {"id": 4}]
max(entries, key=lambda x: x["id"])

输出如下:

Output
{'id': 17}

max使用字典列表作为其输入进行调用您提供一个匿名lambda函数作为key关键字参数。列表中的每个元素max调用lambda函数entries并返回"id"给定元素键值。最终的返回值是在所述第二元件entries{"id": 17}中的第二个元素entries具有"id"最大值,因此被认为是最大元素。

请注意,当max使用空的可迭代对象调用时,它拒绝操作而是引发一个ValueError

max([])

如果运行此代码,您将收到以下输出:

Output
Traceback (most recent call last): File "max.py", line 1, in <module> max([]) ValueError: max() arg is an empty sequence

max使用一个空列表作为参数调用。max不接受此作为有效输入,ValueError而是引发异常。

max有一个名为 的对应项min,您接下来将查看它。

使用 min

内置函数min返回其参数中给出的最小元素。例如:

min([8, 0, 3, 1])

您给出min一个带有四个整数的列表作为其参数。的返回值min是该列表中的最小元素:0

输出将是:

Output
0

如果给定两个或多个位置参数(而不是带有可迭代的单个位置参数),则min返回给定参数中的最小参数:

min(1, -1, 3)

如果您运行前面的代码,您将收到以下输出:

Output
-1

您给出min三个单独的参数,其中最小的是-1因此,调用的返回值min-1

Like max,min支持关键字参数 namedkey以便您可以将比数字更复杂的对象传递给它。使用key参数允许您将该min函数与您的程序可能定义的任何自定义对象一起使用

您可以使用key关键字参数来定义一个自定义函数,该函数确定比较中使用的值以确定最小值。例如:

entries = [{"id": 9}, {"id": 17}, {"id": 4}]
min(entries, key=lambda x: x["id"])
Output
{'id': 4}

min使用字典列表作为其输入进行调用您提供一个匿名lambda函数作为key关键字参数。列表中的每个元素min调用lambda函数entries并返回"id"给定元素键值。最终的返回值是第三个元素entries{"id": 4}中的第三个元素entries具有较小的"id"值,因此被认为是最小的元素。

就像max,当你min用一个空的可迭代对象调用时,它拒绝操作而是引发一个ValueError

min([])

如果您运行前面的代码,您将收到以下输出:

Output
Traceback (most recent call last): File "min.py", line 1, in <module> min([]) ValueError: min() arg is an empty sequence

min使用一个空列表作为参数调用。min不接受此作为有效输入,ValueError而是引发异常。

结论

在本教程中,您使用Python的内置功能allanymax,和min您可以了解更多的功能allanymax,和min与其他Python内置的Python文档

有关其他 Python 内置函数的更多信息,您还可以查看用于处理数字的内置 Python 3 函数如何使用 Python 映射函数如何使用 Python 过滤器函数

觉得文章有用?

点个广告表达一下你的爱意吧 !😁