作者选择了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
停止迭代并立即返回。因此,如果您想检查可能相互建立的连续条件,但在一个条件为 时立即返回,这会很有用。False
False
all
False
需要注意的一个特殊情况是何时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
停止迭代并立即返回。因此,如果您想检查连续的条件,但只要一个条件为 ,就立即返回,这可能很有用。True
True
any
True
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
。
就像any
and一样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 过滤器函数。