Python sum() 函数

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)

运行结果如下。

249999500000

sum() 最佳实践

在使用 sum() 函数时,小伙伴们应该遵循以下最佳实践:

  • 对于高精度浮点数的累加,应该使用 math.fsum()。
  • 如果想要并行加速累加,可以使用 numpy.sum()。
  • 对于乘积计算,应该使用 math.prod() (Python 3.8+)。

上一篇: min()

下一篇: input()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号