max()、min()、sum()这三个内置函数分别用于计算列表、元组或其他可迭代对象中所有元素最大值、最小值以及所有元素之和,sum()只支持数值型元素的序列或可迭代对象,max()和min()则要求序列或可迭代对象中的元素之间可比较大小。下面的代码首先使用列表推导式生成包含10个随机数的列表,然后分别计算该列表的最大值、最小值和所有元素之和。

>>> from random import randint
>>> a = [randint(1,100) for i in range(10)]  #包含10个[1,100]之间随机数的列表
>>> print(max(a), min(a), sum(a)) #最大值、最小值、所有元素之和

很显然,如果需要计算该列表中所有元素的平均值,可以直接使用下面的方法:

>>> sum(a) / len(a)

函数max()和min()还支持default参数和key参数,其中default参数用来指定可迭代对象为空时默认返回的最大值或最小值,而key参数用来指定比较大小的依据或规则。函数sum()还支持start参数,用来控制求和的初始值。

>>> max(['2', '111'])   #不指定排序规则
'2'
>>> max(['2', '111'], key=len) #返回最长的字符串
'111'
>>> print(max([], default=None)) #对空列表求最大值,返回空值None
None
>>> sum(range(1, 11)) #sum()函数的start参数默认为0
55
>>> sum(range(1, 11), 5)  #指定start参数为5,等价于5+sum(range(1,11))
60
>>> sum([[1, 2], [3], [4]], [])  #这个操作占用空间较大,慎用
[1, 2, 3, 4]
>>> sum(2**i for i in range(200)) #等比数列前n项的和,1+2+4+8+...+2^199
1606938044258990275541962092341162602522202993782792835301375
>>> int('1'*200, 2)   #等价于上一行代码,但速度快很多
1606938044258990275541962092341162602522202993782792835301375
>>> int('1'*200, 7) #比值q为2-36之间的整数时,都可以这样做
1743639715219059529169816601969468943303198091695038943325023347339187627904043708629063769151560675048844208042091052362343863390613931864691792377889969422439576020000
>>> sum(range(101)) #101个人开会,互相握手次数
5050
>>> 101 * 100 / 2   #每个人与其他所有握手,除以2是避免重复握手
5050.0