Python-3.12.0文档解读-内置函数sum()详细说明+记忆策略+常用场景+巧妙用法+综合技巧


一个认为一切根源都是“自己不够强”的INTJ

个人主页:用哲学编程-CSDN博客
专栏:每日一题——举一反三
Python编程学习
Python内置函数

Python-3.12.0文档解读

目录

详细说明

sum(iterable, /, start=0)

参数:

返回值:

注意事项:

版本变化:

示例:

记忆策略

常用场景

使用场景 1:求列表中数字的总和

使用场景 2:求列表中数字的总和,并加上一个起始值

使用场景 3:求二维列表(矩阵)中所有元素的总和

使用场景 4:求字典中所有值的总和

使用场景 5:求一系列生成器表达式的总和

巧妙用法

使用技巧 1:计算布尔值列表中 True 的数量

使用技巧 2:计算字符串中数字字符的总和

使用技巧 3:计算嵌套字典中所有数值的总和

使用技巧 4:计算两个列表中对应元素的和

使用技巧 5:合并多个字典中的数值

综合技巧

巧妙用法 1:结合 map() 和 sum() 计算平方和

巧妙用法 2:结合 filter() 和 sum() 计算满足条件的元素的总和

巧妙用法 3:结合 zip() 和 sum() 计算矩阵对角线元素的和

巧妙用法 4:结合 itertools.chain() 和 sum() 计算多个列表中所有元素的和

巧妙用法 5:结合 sorted() 和 sum() 求前 N 个最小元素的和

巧妙用法 6:结合 enumerate() 和 sum() 计算加权和


详细说明

sum(iterable, /, start=0)

sum() 函数用于从指定的开始值 start 开始,自左向右对 iterable 中的项求和,并返回总计值。

参数:
  • iterable:
    • 需要进行求和的可迭代对象,通常为包含数字的列表、元组等。
  • start(可选):
  • 求和的起始值,默认为 0。注意,start 值不允许为字符串。
返回值:

返回 iterable 中所有项与 start 值之和。

注意事项:
  1. 对于某些特定的用例,存在比 sum() 更好、更快的替代方法。
  • 若需要拼接字符串序列,推荐使用 ''.join(sequence),效率更高。
  • 若需要以扩展精度对浮点数进行求和,推荐使用 math.fsum()。
  • 若需要拼接一系列可迭代对象,推荐使用 itertools.chain()。
版本变化:
  • 在 Python 3.8 版中:start 参数可以通过关键字参数的形式来指定。
  • 在 Python 3.12 版中:浮点数的加总算法已切换为一种能在大多数构建版本上给出更高精度的算法。
示例:
# 求和示例
numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total)  # 输出 15# 指定起始值的求和示例
total_with_start = sum(numbers, 10)
print(total_with_start)  # 输出 25# 错误示例:start 值不允许为字符串
try:sum(numbers, '10')
except TypeError as e:print(e)  # 输出 TypeError: sum() can't sum strings [use ''.join(seq) instead]

记忆策略


sum 在英语中意为“总和”或“加总”。当你看到 sum 时,可以立即联想到加法运算或求和。


常用场景

当然,以下是 sum() 函数在不同场景中的详细使用示例,每行代码都附有注释:

使用场景 1:求列表中数字的总和

# 场景描述:你有一个包含多个数字的列表,想要计算这些数字的总和。# 定义一个包含多个数字的列表
numbers = [1, 2, 3, 4, 5]# 使用 sum() 函数对列表中的数字求和
total = sum(numbers)# 输出总和
print(total)  # 输出 15

使用场景 2:求列表中数字的总和,并加上一个起始值

# 场景描述:你有一个包含多个数字的列表,想要在计算这些数字的总和时加上一个起始值。# 定义一个包含多个数字的列表
numbers = [1, 2, 3, 4, 5]# 指定一个起始值
start_value = 10# 使用 sum() 函数对列表中的数字求和,并加上起始值
total_with_start = sum(numbers, start_value)# 输出总和
print(total_with_start)  # 输出 25

使用场景 3:求二维列表(矩阵)中所有元素的总和

# 场景描述:你有一个二维列表(矩阵),想要计算其中所有元素的总和。# 定义一个二维列表(矩阵)
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]# 使用嵌套的 sum() 函数对矩阵中的所有元素求和
total_matrix_sum = sum(sum(row) for row in matrix)# 输出总和
print(total_matrix_sum)  # 输出 45

使用场景 4:求字典中所有值的总和

python复制

# 场景描述:你有一个包含多个键值对的字典,想要计算所有值的总和。# 定义一个字典,键为字符串,值为数字
data = {'a': 1,'b': 2,'c': 3,'d': 4
}# 使用 sum() 函数对字典中的所有值求和
total_values = sum(data.values())# 输出总和
print(total_values)  # 输出 10

使用场景 5:求一系列生成器表达式的总和

# 场景描述:你有一个生成器表达式,想要计算其中所有生成值的总和。# 定义一个生成器表达式,用于生成 1 到 10 之间的所有数的平方
squares_generator = (x**2 for x in range(1, 11))# 使用 sum() 函数对生成器表达式产生的所有数值求和
total_squares_sum = sum(squares_generator)# 输出总和
print(total_squares_sum)  # 输出 385

巧妙用法

使用技巧 1:计算布尔值列表中 True 的数量

布尔值在 Python 中可以作为整数使用,其中 True 相当于 1,False 相当于 0。我们可以利用 sum() 函数来计算列表中 True 的数量。

# 定义一个包含布尔值的列表
bool_list = [True, False, True, True, False]# 使用 sum() 函数计算列表中 True 的数量
true_count = sum(bool_list)# 输出 True 的数量
print(true_count)  # 输出 3

使用技巧 2:计算字符串中数字字符的总和

通过 sum() 函数,我们可以将字符串中的数字字符转化为整数并计算它们的总和。

# 定义一个包含数字字符的字符串
num_str = "12345"# 使用 sum() 函数计算字符串中数字字符的总和
total = sum(int(char) for char in num_str)# 输出总和
print(total)  # 输出 15

使用技巧 3:计算嵌套字典中所有数值的总和

如果有一个嵌套的字典结构,可以使用递归和 sum() 函数来计算其中所有数值的总和。

# 定义一个嵌套的字典
nested_dict = {'a': 1,'b': {'c': 2, 'd': 3},'e': {'f': {'g': 4, 'h': 5}}
}# 定义一个递归函数,用于计算嵌套字典中的所有数值的总和
def sum_nested_dict(d):total = 0for value in d.values():if isinstance(value, dict):total += sum_nested_dict(value)else:total += valuereturn total# 调用递归函数并输出总和
total_sum = sum_nested_dict(nested_dict)
print(total_sum)  # 输出 15

使用技巧 4:计算两个列表中对应元素的和

通过 zip() 和 sum() 函数,可以计算两个列表中对应元素的和。

# 定义两个等长的列表
list1 = [1, 2, 3]
list2 = [4, 5, 6]# 使用列表推导式和 zip() 计算两个列表中对应元素的和
sum_list = [sum(pair) for pair in zip(list1, list2)]# 输出结果列表
print(sum_list)  # 输出 [5, 7, 9]

使用技巧 5:合并多个字典中的数值

通过 sum() 函数,可以实现多个字典的合并,并计算相同键的数值之和。

from collections import Counter# 定义多个字典
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 2, 'c': 4, 'd': 1}
dict3 = {'b': 3, 'c': 1, 'd': 2}# 使用 Counter 和 sum() 函数合并字典并计算相同键的数值之和
total_counter = sum((Counter(d) for d in [dict1, dict2, dict3]), Counter())# 输出结果字典
print(total_counter)  # 输出 Counter({'c': 8, 'b': 5, 'a': 3, 'd': 3})

这些技巧展示了 sum() 函数在处理布尔值、字符串、嵌套字典、列表和字典合并等方面的巧妙应用。通过这些特殊的用法,可以在很多场景中简化代码,提高代码的可读性和效率。


综合技巧

当然,sum() 函数可以与其他函数或方法相结合,创造出一些非常巧妙的用法,以下是几个这样的例子:

巧妙用法 1:结合 map() 和 sum() 计算平方和

可以通过 map() 函数对每个元素进行平方,再用 sum() 函数计算平方和。

# 定义一个列表
numbers = [1, 2, 3, 4, 5]# 使用 map() 和 sum() 计算列表中所有数字的平方和
square_sum = sum(map(lambda x: x**2, numbers))# 输出平方和
print(square_sum)  # 输出 55

巧妙用法 2:结合 filter() 和 sum() 计算满足条件的元素的总和

通过 filter() 函数筛选满足条件的元素,再用 sum() 函数求和。

# 定义一个列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 使用 filter() 筛选出偶数,再用 sum() 计算这些偶数的总和
even_sum = sum(filter(lambda x: x % 2 == 0, numbers))# 输出偶数的总和
print(even_sum)  # 输出 30

巧妙用法 3:结合 zip() 和 sum() 计算矩阵对角线元素的和

可以通过 zip() 函数提取矩阵的对角线元素,再用 sum() 函数计算它们的和。

# 定义一个矩阵
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]# 使用 zip() 提取主对角线元素,再用 sum() 计算它们的总和
diagonal_sum = sum(matrix[i][i] for i in range(len(matrix)))# 输出对角线元素的总和
print(diagonal_sum)  # 输出 15

巧妙用法 4:结合 itertools.chain() 和 sum() 计算多个列表中所有元素的和

可以通过 itertools.chain() 函数将多个列表连接起来,再用 sum() 函数计算总和。

import itertools# 定义多个列表
list1 = [1, 2, 3]
list2 = [4, 5]
list3 = [6, 7, 8, 9]# 使用 itertools.chain() 将多个列表连接起来,再用 sum() 计算总和
total_sum = sum(itertools.chain(list1, list2, list3))# 输出总和
print(total_sum)  # 输出 45

巧妙用法 5:结合 sorted() 和 sum() 求前 N 个最小元素的和

可以通过 sorted() 函数对列表进行排序,再用 sum() 函数计算前 N 个最小元素的和。

# 定义一个列表
numbers = [10, 5, 8, 3, 7, 2, 1, 6, 4, 9]# 指定 N 的值
N = 3# 使用 sorted() 对列表进行排序,取前 N 个最小元素,再用 sum() 计算它们的总和
min_sum = sum(sorted(numbers)[:N])# 输出前 N 个最小元素的总和
print(min_sum)  # 输出 6 (1 + 2 + 3)

巧妙用法 6:结合 enumerate() 和 sum() 计算加权和

可以通过 enumerate() 函数为每个元素添加权重,再用 sum() 函数计算加权和。

# 定义一个列表
numbers = [1, 2, 3, 4, 5]# 使用 enumerate() 为每个元素添加权重(从 1 开始),再用 sum() 计算加权和
weighted_sum = sum(index * number for index, number in enumerate(numbers, start=1))# 输出加权和
print(weighted_sum)  # 输出 55 (1*1 + 2*2 + 3*3 + 4*4 + 5*5)

这些例子展示了如何灵活地结合 sum() 函数与其他函数或方法,以实现不同的任务。这种组合使用方式不仅能简化代码,还能提高代码的可读性和效率。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序方法大汇总

以下所有排序方法均以排升序为例 一.插入排序 1.直接插入排序 1>方法介绍:假定前n个数据有序,将第n1个数据依次与前n个数据相比,若比第i个数据小且比第i-1个数据大则插入两者之间 2>时间复杂度:O(N^2) 空间复杂度&#…

BUUCTF中的密码题目解密

BUUCTF 1.MD5 题目名称就是MD5,这个题目肯定和md5密码有关,下载题目,打开后发现这确实是一个md5加密的密文 Md5在线解密网站:md5在线解密破解,md5解密加密 经过MD5在线解密网站解密后,获取到flag为:flag{…

网络编程TCP

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java网络编程(下)🙉 🐹今日诗词: 壮士当唱大风哥, 宵小之徒能几何?🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微…

CentOS7单用户模式,救援模式操作记录

CentOS7单用户模式,救援模式操作记录 1. 单用户模式 单用户模式进入不需要密码,无网络连接,拥有root权限,禁止远程登陆。一般用于用于系统维护,例如忘记root密码后可以通过进入单用户模式进行重置。 开机启动&#…

数据结构 实验 1

题目一:用线性表实现文具店的货品管理问题 问题描述:在文具店的日常经营过程中,存在对各种文具的管理问题。当库存文具不足或缺货时,需要进货。日常销售时需要出库。当盘点货物时,需要查询货物信息。请根据这些要求编…

使用低代码系统的意义与价值主要体现在哪里?

使用低代码系统的意义与价值主要体现在以下几个方面,这些观点基于驰骋低代码设计者的专业洞察和行业经验: 快速原型创建: 低代码平台通过提供图形化界面和预构建的模块,极大地加速了系统原型的创建过程。这意味着企业能够更快地验…

60 关于 SegmentFault 的一些场景 (1)

前言 呵呵 此问题主要是来自于 帖子 月经结贴 -- 《Segmentation Fault in Linux》 这里主要也是 结合了作者的相关 case, 来做的一些 调试分享 当然 很多的情况还是 蛮有意思 本文主要问题如下 1. 访问可执行文件中的 只读数据 2. 访问不存在的虚拟地址 3. 访问内核地址…

嵌入式工程师人生提质的十大成长型思维分享

大家好,作为一名嵌入式开发者,很多时候,需要考虑个人未来的发展,人生旅途复杂多变,时常面临各种各样的挑战。如何在这个复杂多变的社会中稳步向前,不断成长,成为每个人都应该思考的问题。实际上,思维方式的差异决定我们应对挑战的能力与成长的速度。 第一:寻找自我坐…

HNCTF2022 REVERSE

[HNCTF 2022 WEEK2]esy_flower 简单花指令 Nop掉 然后整段u c p然后就反汇编 可能反编译的不太对&#xff0c;&#xff0c;看了别人的wp就是ida反编译的有问题 #include<stdio.h> #include<string.h> int main() {int i,j;char ch[]"c~scvdzKCEoDEZ[^roDICU…

微软远程连接工具:Microsoft Remote Desktop for Mac 中文版

Microsoft Remote Desktop 是一款由微软开发的远程桌面连接软件&#xff0c;它允许用户从远程地点连接到远程计算机或虚拟机&#xff0c;并在远程计算机上使用桌面应用程序和文件。 下载地址&#xff1a;https://www.macz.com/mac/5458.html?idOTI2NjQ5Jl8mMjcuMTg2LjEyNi4yMz…

C++进阶之AVL树+模拟实现

目录 目录 一、AVL树的基本概念 1.1 基本概念 二、AVL树的模拟实现 2.1 AVL树节点的定义 2.2 插入操作 2.3 旋转操作 2.4 具体实现 一、AVL树的基本概念 1.1 基本概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十四)- 微服务(4)

目录 8. http客户端Feign 8.1 feign远程调用 8.2 feign自定义配置 8.3 feign性能优化 8.4 feign最佳实践 8. http客户端Feign 8.1 feign远程调用 RestTemplate存在的问题 &#xff1a; 代码可读性差 参数复杂URL难以维护 Feign是声明式的http客户端 使用步骤 &#xf…

飞书API(11):阿里云MaxCompute分区表入库

一、引入 前面入库阿里云 MaxCompute 的数据都是读取之后直接写入&#xff0c;保留数据最新的状态&#xff0c;如果我要保留历史的状态&#xff0c;怎么办呢&#xff1f;MaxCompute 表有一个分区功能&#xff0c;可以自行定义分区。我们可以使用 MaxCompute 表的分区功能&…

远程自动锁定平面

目录 Ubuntu 系统上 方法一&#xff1a;使用 SSH 重新连接 方法二&#xff1a;解锁当前会话 方法三&#xff1a;通过 SSH 解锁会话 方法四&#xff1a;禁用自动锁屏&#xff08;如果合适&#xff09; windows系统 方法三&#xff1a;修改组策略设置 Ubuntu 系统上 远程…

重生之我要精通JAVA--第七周笔记

文章目录 IO流字符流字符流原理解析flush和close方法 文件拷贝代码文件加密解密修改文件中的数据 缓冲流字节缓冲流字符缓冲流例题 转换流序列化流序列化流/对象操作输出流 反序列化流序列化流/反序列化流的细节汇总打印流字节打印流字符打印流 解压缩流压缩流Commons-io常见方…

网络空间安全数学基础·环

4.1 环与子环 &#xff08;理解&#xff09; 4.2 整环、除环、域 &#xff08;熟练&#xff09; 4.3 环的同态、理想 &#xff08;掌握&#xff09; 4.1 环与子环 定义&#xff1a;设R是一非空集合&#xff0c;在R上定义了加法和乘法两种代数运算&#xff0c; 分别记为ab和a…

java收徒、java面试辅导、java辅导、java就业辅导

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

MMPose-RTMO推理详解及部署实现(下)

目录 前言一、RTMO推理(Python)1. RTMO预测2. RTMO预处理3. RTMO后处理4. RTMO推理 二、RTMO推理(C)1. ONNX导出2. RTMO预处理3. RTMO后处理4. RTMO推理 三、RTMO部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.2 配置Makefile 3. ONNX导出4. engine生成5. 源码修改6. 运行…

HCP;IDA;ABIDE(孤独症)磁共振数据库下载

ABIDE https://fcon_1000.projects.nitrc.org/indi/abide/abide_II.html 根据研究目的和研究目的选择不同站点的数据—不同站点的数据 HCP-IDE https://ida.loni.usc.edu/project_info.jsp 点击下载-图像集合 选择研究对象 全选-下载

边缘密度分布图 | ggExtra包/aplot拼图/ggpubr包 等的实现方法

概述&#xff1a;aplot 拼图效果好 根据网友探索[1]&#xff0c;总结如下&#xff1a; ggExtra 包的拼图间隙有点大&#xff0c;图例在主图和边缘图之间&#xff0c;除非去掉图例&#xff0c;否则没法看。aplot包的默认拼图间隙很小&#xff0c;比较美观&#xff0c;图例在外…