Python sum() 语法
sum() 是 Python 的一个内置函数,它用于将一个可迭代对象的所有项进行相加求和。
语法:
sum(iterable, start=0)说明:
sum() 函数接收以下 2 个参数。
iterable(必选):它是一个可迭代对象。start(可选):表示累加的初始值,默认为 0。
提示:
- sum() 函数在计算过程中会使用加法运算符 “+” 。
- sum() 通常比手动编写循环来累加数字更简洁、更高效。
- 对于浮点数的求和,可能会存在浮点精度问题。如果需要精确的浮点数求和,应该考虑使用 math.fsum() 函数。
Python sum() 摘要
| 使用频率 | 高 |
|---|---|
| 时间复杂度 | O(n) |
| 官方文档 | 查看 |
| 相关函数 | min()、max()、len() |
Python sum() 示例
接下来,我们通过几个简单的例子来讲解一下 Python sum() 函数是如何使用的。
示例 1:sum() 对列表求和
nums = [1, 2, 3, 4, 5]
result = sum(nums)
print(result)运行结果如下。
15示例 2:sum() 使用 start 参数
nums = [1, 2, 3, 4, 5]
# 默认 start 为 0,等价于 0 + 1 + 2 + 3 + 4 + 5
print(sum(nums))
# 指定 start 为 10,等价于 10 + 1 + 2 + 3 + 4 + 5
print(sum(nums, 10))运行结果如下。
15
25分析:
当我们提供 start 参数时,sum() 会将 start 的值作为累加的初始基数,然后再依次加上可迭代对象中的每一个元素。
示例 3:sum() 对字典求和
d = {'a': 10, 'b': 20, 'c': 30}
result = sum(d.values())
print(result)运行结果如下。
60示例 4:sum() 对集合求和
nums = {1, 2, 3, 4, 5}
result = sum(nums)
print(result)运行结果如下。
15示例 5:sum() 对元组求和
nums = (1, 2, 3, 4, 5)
result = sum(nums)
print(result)运行结果如下。
15示例 6:sum() 对 range 对象求和
nums = range(5)
result = sum(nums)
print(result)运行结果如下。
10分析:
range(5) 返回的项是 0、1、2、3、4,因此使用 sum() 求和结果为 10。
sum() 注意事项
我们在使用 sum() 函数时,有几个关键点需要特别留意,以确保它能按预期工作并发挥最佳性能。
1. 类型一致性
sum() 函数接收的是一个可迭代对象,但该可迭代对象的所有项必须都是数字才能正常求和,如果是其他类型则会报错(抛出 TypeError 异常)。
示例 7:可迭代对象包含非数字项
nums = {1, 2, '3', 4, 5}
result = sum(nums)
print(result)运行结果如下。
(报错)TypeError: unsupported operand type(s) for +: 'int' and 'str'2. 字典键求和陷阱
如果直接对字典使用 sum() 函数,则会对所有键进行求和。
示例 8:对字典使用 sum()
d = {1: 10, 2: 20}
print(sum(d))
print(sum(d.values()))运行结果如下。
3
30分析:
如果想要对字典所有的 “值” 进行求和,则应该写成 sum(d.values()),而不是 sum(d)。
3. 大数累加优化
对于海量数据的求和,建议使用生成器的方式,这样可以避免内存消耗。
示例 9:使用 sum() 对大数累加
result = sum(x for x in range(10**6) if x%2 == 0)
print(result)运行结果如下。
249999500000sum() 最佳实践
在使用 sum() 函数时,小伙伴们应该遵循以下最佳实践:
- 对于高精度浮点数的累加,应该使用 math.fsum()。
- 如果想要并行加速累加,可以使用 numpy.sum()。
- 对于乘积计算,应该使用 math.prod() (Python 3.8+)。
