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 = 0
    for value in d.values():
        if isinstance(value, dict):
            total += sum_nested_dict(value)
        else:
            total += value
    return 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() 函数与其他函数或方法,以实现不同的任务。这种组合使用方式不仅能简化代码,还能提高代码的可读性和效率。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【风力发电】山顶的白色“大风车”你了解吗?

文章目录 术语定义 基本要求 外部条件 电气系统 控制系统 参考资料 术语定义 风力发电机组wind turbine generator system;WTGS,将风的动能转换为电能的系统。示例如下: 支撑结构support structure,风力发电机组的塔架和基础部分。 机舱…

NVIDIA NeMo - 训练本地化多语种 LLM

本文转载自:使用 NVIDIA NeMo 训练本地化多语种 LLM (2024年 5月 17日 By Nicole Luo and Amit Bleiweiss 第 1 部分 https://developer.nvidia.com/zh-cn/blog/training-localized-multilingual-llms-with-nvidia-nemo-part-1/ 第 2 部分 https://deve…

优盘打不开的困境与解决之道

在日常的工作和生活中,优盘作为一种便携式存储设备,因其小巧、轻便和容量大等特点而备受青睐。然而,当优盘突然无法打开时,我们往往会陷入一片混乱之中,担心存储在其中的重要数据会因此丢失。本文将详细解析优盘打不开…

服务器进不去conda环境问题

source ~/.bashrc 立即重新加载和应用 .bashrc 配置文件中的设置。当你对 .bashrc 文件进行了修改,比如添加或修改了环境变量、别名(alias)、函数等功能后,通常需要执行这个命令来让这些更改在当前终端会话中生效,而无需关闭并重新打开终端。…

牛客网刷题 | BC111 空心正方形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

解决mysql5.7版本中,子查询order by后,对子查询进行group by分组获取最新记录无效的问题

目录 场景简介原因示例mysql5.7之前的版本mysql5.7之后的版本解决1、使用having2、使用limit3、使用子查询获取目标数据ID 场景简介 子查询order by后,对子查询进行group by分组获取最新记录失败 应用场景:一对多的关系,通常需要取最新、最…

牛客网刷题 | BC107 箭形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

IO流(2)

缓冲流 字节缓冲流 利用字节缓冲区拷贝文件,一次读取一个字节: public class test {public static void main(String [] args) throws IOException {//利用字节缓冲区来拷贝文件BufferedInputStream bisnew BufferedInputStream(new FileInputStream(&…

【CTF MISC】XCTF GFSJ0008 low Writeup(LSB隐写+QR Code识别)

low 暂无 解法 用 StegSolve 打开,Green plane 1 中疑似隐藏有二维码。 使用大佬写的代码: from PIL import Imageimg Image.open("./low.bmp") img_tmp img.copy() pix img_tmp.load() width, height img_tmp.size for w in range(wid…

[论文精读]Supervised Community Detection with Line Graph Neural Networks

论文网址:[1705.08415] Supervised Community Detection with Line Graph Neural Networks (arxiv.org) 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 ⭐内涵大量可视…

基于Springboot开发的外卖餐购项目(后台管理+消费者端)

免费获取方式↓↓↓ 项目介绍039: 系统运行 后端登录页: http://localhost:8081/backend/page/login/login.html 消费端请求:消费端主页: http://localhost:8081/front/index.html 管理员账号 admin 123456 消费者不需要登录 采用技术栈 前端:Eleme…

嵌入式期末复习

一、选择题(20) 二、判断题(10) 三、填空题(10) 主机-目标机的文件传输方式主要有串口传输方式、网络传输方式、USB接口传输方式、JTAG接口传输方式、移动存储设备方式。常用的远程调试技术主要有 插桩/st…

设计模式(八)结构型模式---装饰者模式

文章目录 装饰者模式简介结构UML图具体实现UML图代码实现 装饰者模式简介 装饰者模式(Decorator Pattern)是动态的将新对象依附到对象上。相当于对象可以包裹对象本身,然后可以根据递归方式获取想要的信息。实际使用: JDK中的IO流…

python根据版本下载外部库的.whl文件、python下载离线whl文件、python查找whl历史版本

文章目录 一、python下载外部库的.whl文件 当遇到pip源中没有对应的包,或者网络波动时,可能出现需要离线安装的方法。这里记录一下下载安装whl文件的操作。 一、python下载外部库的.whl文件 1、在浏览器输入https://pypi.org/进入PYPI官网 2、在弹出的…

LitCTF 2024(公开赛道)——WP

目录 Misc 涐贪恋和伱、甾―⑺d毎兮毎秒 你说得对,但__ 盯帧珍珠 Everywhere We Go 关键,太关键了! 女装照流量 原铁,启动! 舔到最后应有尽有 The love Web exx 一个....池子? SAS - Serializing Authent…

WSL2-Ubuntu22.04-配置

WSL2-Ubuntu22.04-配置 准备1. WSL相关命令[^1]2. WSL2-Ubuntu22.04可视化3. WSL2 设置 CUDA4. 设置OpenGL 本文介绍了WSL2的基本使用方法及可视化,着重介绍了GPU和OpenGL的设置。 准备 名称版本windows11wsl2CUDA12.5 1. WSL相关命令1 查看已安装的wsl distribut…

大话C语言:第21篇 数组

1 数组概述 数组是若干个相同类型的变量在内存中有序存储的集合。 数组是 C 语言中的一种数据结构,用于存储一组具有相同数据类型的数据。 数组在内存中会开辟一块连续的空间 数组中的每个元素可以通过一个索引(下标)来访问,索…

网上帮别人开网店卖货的骗局!

小红书帮别人开店卖货的骗局主要涉及到一些不法分子利用小红书平台的流量和用户信任度,通过虚假宣传、承诺高额利润等手段,诱骗用户开店并**所谓的“赚钱机会”。 这些骗局往往以“轻松创业、快速致富”为诱饵,吸引那些对创业充满热情但缺乏经…

汽美汽修店管理系统会员小程序的作用是什么

汽车后市场汽美汽修赛道同样存在着大量商家,连锁品牌店或个人小店等,门店扎堆且区域覆盖面积广,当然每天车来车往也有不少生意。 随着线上化程度加深和商家不断拓展市场的需要,传统运营模式可能难以满足现状,尤其是年…