作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。
介绍
Python 包括许多内置函数——这些是全局 Python 函数,可以从任何 Python 代码调用,而无需导入其他模块。例如,您始终可以调用print内置函数来输出文本。
几个内置函数(all、any、max和min其中)将值的可迭代对象作为它们的参数并返回单个值。一个可迭代对象是一个可以“迭代”的 Python 对象,也就是说,它将按顺序返回项目,以便您可以在for循环中使用它。例如,当您想要确定列表中的所有或任何元素是否满足特定条件,或者查找列表中的最大或最小元素时,内置函数非常有用。
在本教程中,您将使用内置的功能all,any,max,和min。
先决条件
为了充分利用本教程,建议您拥有:
-
对 Python 3 编程有一定的了解。您可以查看我们的How To Code in Python 3系列教程以了解背景知识。
-
Python 交互式控制台,如果您想尝试本教程中的示例代码,可以使用如何使用Python 交互式控制台教程。
使用 all
内置函数all检查迭代中的每个元素是否都是True。例如:
all([True, True])
如果您运行前面的代码,您将收到以下输出:
OutputTrue
在第一个示例中,您调用all并为其提供一个包含两个元素(两个True布尔值)的列表。由于迭代中的每个元素都是True,因此输出是True。
all将返回False在给定的迭代,如果一个或多个元素是False:
all([True, False, True])
如果您运行前面的代码,您将收到以下输出:
OutputFalse
您all使用包含三个元素(包括一个False布尔值)的列表进行调用。由于可迭代对象中的一个元素是False,因此调用的输出all是False。
值得注意的是,一旦遇到迭代中的第一个条目,就all停止迭代并立即返回。因此,如果您想检查可能相互建立的连续条件,但在一个条件为 时立即返回,这会很有用。FalseFalseallFalse
需要注意的一个特殊情况是何时all给出一个空的可迭代对象:
all([])
如果您运行前面的代码,您将收到以下输出:
OutputTrue
当您给出all一个空的可迭代对象(例如,像 的空列表all([]))时,其返回值为True。因此,如果迭代中的每个元素都为 True 或有 0 个元素,则all返回True。
all与生成器和自定义条件结合使用时特别有用。使用all通常比编写完整的for循环更短更简洁。让我们考虑一个例子来找出列表中是否有以 开头的元素"s":
animals = ["shark", "seal", "sea urchin"]
all(a.startswith("s") for a in animals)
如果您运行前面的代码,您将收到以下输出:
OutputTrue
您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需要多几行才能实现。
接下来,您将看到的同级功能all:any。
使用 any
您可以使用内置函数any检查可迭代对象中的任何元素是否为True。例如:
any([False, True])
如果您运行前面的代码,您将收到以下输出:
OutputTrue
您调用any并为其提供一个包含两个元素(一个False布尔值和一个True布尔值)的列表。由于迭代中的一个或多个元素是True,因此输出也是True。
any将返回False,当且仅当在元素0给定的迭代是True:
all([False, False, False])
如果您运行前面的代码,您将收到以下输出:
OutputFalse
您any使用包含三个元素(所有False布尔值)的列表进行调用。由于可迭代对象中有 0 个元素是True,因此调用的输出any是False。
值得注意的是,一旦遇到迭代中的第一个条目,就any停止迭代并立即返回。因此,如果您想检查连续的条件,但只要一个条件为 ,就立即返回,这可能很有用。TrueTrueanyTrue
any– 就像它的兄弟方法一样all– 在与生成器和自定义条件(代替完整for循环)结合使用时特别有用。让我们考虑一个例子来找出列表中是否有以 结尾的元素"urchin":
animals = ["shark", "seal", "sea urchin"]
any(s.endswith("urchin") for s in animals)
您将收到此输出:
OutputTrue
您any使用生成器作为参数调用。生成器animals根据动物是否以 结尾为列表中的每个元素生成一个布尔值urchin。最终的返回值是True因为animals列表中的一个元素以urchin.
注意:当any给定一个空的可迭代对象(例如,像 一样的空列表any([]))时,其返回值为False。因此,any收益False是否有在迭代0元素或所有元素的迭代器也False。
接下来,您将查看另一个内置函数:max.
使用 max
内置函数max返回其参数中给出的最大元素。例如:
max([0, 8, 3, 1])
max给出一个带有四个整数作为参数的列表。的返回值max是该列表中最大的元素:8。
输出如下:
Output8
如果给定两个或多个位置参数(而不是带有可迭代的单个位置参数),则max返回给定参数中最大的一个:
max(1, -1, 3)
如果您运行前面的代码,您将收到以下输出:
Output3
max给出三个单独的参数,其中最大的是3。因此,调用的返回值max是3。
就像anyand一样all,max特别有用,因为与编写为完整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([])
如果运行此代码,您将收到以下输出:
OutputTraceback (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。
输出将是:
Output0
如果给定两个或多个位置参数(而不是带有可迭代的单个位置参数),则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([])
如果您运行前面的代码,您将收到以下输出:
OutputTraceback (most recent call last):
File "min.py", line 1, in <module>
min([])
ValueError: min() arg is an empty sequence
您min使用一个空列表作为参数调用。min不接受此作为有效输入,ValueError而是引发异常。
结论
在本教程中,您使用Python的内置功能all,any,max,和min。您可以了解更多的功能all,any,max,和min与其他Python内置的Python文档。
有关其他 Python 内置函数的更多信息,您还可以查看用于处理数字的内置 Python 3 函数、如何使用 Python 映射函数和如何使用 Python 过滤器函数。