Logo
Section 1 / 7

长度与和

学习如何使用 "len" 和 "sum" 函数来缩减可迭代对象。

导入

长度与和

学习如何使用 "len" 和 "sum" 函数来缩减可迭代对象。

减少函数

在之前关于 迭代器 的章节中,我们将内置的迭代器函数分为几类:

  • 转换函数
  • 减少函数
  • 转换函数
  • 基础函数

本章我们将介绍减少函数。

减少函数 会将可迭代对象中的所有值合并为一个单一的代表值。例如,sum 将可迭代对象中的所有值相加,并返回总和。

len

len 应该非常熟悉。它简单地返回某个对象的长度,即如果是列表或元组,则返回元素个数;如果是字符串,则返回字符个数。

1print(len([1, 2, 30])) # 3 2print(len('uvwxyz')) # 6

len 不适用于惰性可迭代对象(如 map 或 filter 的输出)。你可以将惰性可迭代对象转换为列表,然后对结果应用 len。
或者,你可以使用本章稍后介绍的 映射-归约模式 中描述的方法。

sum

sum 接受一个可迭代对象,并返回其总和——即通过 + 操作符将所有元素合并的结果。例如:

1a = [2, 5, 7, 1] 2print(sum(a)) # 15

你可以为 sum 提供一个可选的起始值,它会被加到最终结果中。

1a = [2, 5, 7, 1] 2print(sum(a, -3)) # 12

sum 也适用于序列,比如列表。

sum 可用于展平嵌套列表。

然而,下面的代码不会正常工作。

1a = [[2, 4], [0, 0], [5, 3]] 2print(sum(a)) # 错误

你会收到一条关于不支持的操作数类型的晦涩错误信息。问题在于 sum 的默认起始值是 0,因此上述代码实际上相当于尝试计算:

10 + [2, 4] + [0, 0] + [5, 3]

这是无效的,因为无法将列表与整数相加。解决方法是将起始值设为空列表,这样 sum 会计算如下内容:

1[] + [2, 4] + [0, 0] + [5, 3]

这现在是一个合法的运算。你的代码应如下所示:

1a = [[2, 4], [0, 0], [5, 3]] 2print(sum(a, [])) # [2, 4, 0, 0, 5, 3]

另一种连接可迭代对象的方法是使用 itertools.chain,相关内容见 itertools 章节。通常效率更高。

sum 不能用于字符串。Python 明确禁止这种用法,因为使用 + 操作符逐个拼接字符串极其低效。更高效的做法是使用 join 来连接字符串,如下所示。

1a = ['abc', 'pqr', 'xyz'] 2s = ''.join(a) 3print(s)

转换可迭代对象

最小值