news 2026/2/5 12:19:54

轻松玩转 Python 列表:求最大值、最小值、平均值与总和的实用指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
轻松玩转 Python 列表:求最大值、最小值、平均值与总和的实用指南

Python 列表是最常用的数据结构之一,在数据分析、日常计算等场景中,经常需要对列表中的数值进行求和、求最大值、最小值、平均值等统计操作。本文将从内置函数快速实现特殊场景处理自定义函数实现原理进阶优化四个维度,带你轻松掌握这些操作,兼顾实用性与学习深度。

一、基础操作:内置函数一键搞定

Python 提供了sum()max()min()等内置函数,可直接对数值列表进行统计计算,简单高效,是日常开发的首选方式。

1. 求总和:sum()函数

sum(iterable, start=0)函数用于计算可迭代对象(如列表)中所有元素的总和,start为可选参数,表示累加的初始值(默认 0)。

示例代码:

python

# 整数列表求和 num_list = [1, 2, 3, 4, 5] total = sum(num_list) print(f"列表{num_list}的总和:{total}") # 输出:列表[1,2,3,4,5]的总和:15 # 浮点数列表求和 float_list = [1.5, 2.5, 3.0] float_total = sum(float_list) print(f"列表{float_list}的总和:{float_total}") # 输出:列表[1.5,2.5,3.0]的总和:7.0 # 指定初始值求和(初始值10) total_with_start = sum(num_list, 10) print(f"列表{num_list}从10开始累加的总和:{total_with_start}") # 输出:25

2. 求最大值:max()函数

max(iterable)函数返回可迭代对象中的最大值,也可直接传入多个参数(如max(1,2,3))。

示例代码:

python

num_list = [10, 5, 8, 20, 3] max_num = max(num_list) print(f"列表{num_list}的最大值:{max_num}") # 输出:列表[10,5,8,20,3]的最大值:20 float_list = [3.14, 2.71, 1.618] max_float = max(float_list) print(f"列表{float_list}的最大值:{max_float}") # 输出:列表[3.14,2.71,1.618]的最大值:3.14

3. 求最小值:min()函数

min(iterable)函数返回可迭代对象中的最小值,用法与max()完全一致。

示例代码:

python

num_list = [10, 5, 8, 20, 3] min_num = min(num_list) print(f"列表{num_list}的最小值:{min_num}") # 输出:列表[10,5,8,20,3]的最小值:3 float_list = [3.14, 2.71, 1.618] min_float = min(float_list) print(f"列表{float_list}的最小值:{min_float}") # 输出:列表[3.14,2.71,1.618]的最小值:1.618

4. 求平均值:sum()+len()组合

Python 没有直接的average()内置函数,但可通过总和除以元素个数快速计算平均值,即平均值 = sum(列表) / len(列表)

示例代码:

python

num_list = [1, 2, 3, 4, 5] average = sum(num_list) / len(num_list) print(f"列表{num_list}的平均值:{average}") # 输出:列表[1,2,3,4,5]的平均值:3.0 # 保留两位小数(更易读) average_rounded = round(sum(num_list) / len(num_list), 2) print(f"列表{num_list}的平均值(保留两位小数):{average_rounded}") # 输出:3.0

二、处理特殊场景:避免程序崩溃

实际开发中,列表可能出现空列表、包含非数值元素、存在 None 值等情况,直接使用内置函数会报错,需针对性处理。

1. 空列表的处理

空列表调用sum()会返回 0,但调用max()/min()或计算平均值时会抛出异常(ValueError: max() arg is an empty sequence),需先判断列表是否为空。

示例代码:

python

empty_list = [] # 求和:空列表sum返回0,无需处理 print(f"空列表的总和:{sum(empty_list)}") # 输出:0 # 求最大值/最小值:先判断是否为空 if empty_list: print(f"最大值:{max(empty_list)}") else: print("列表为空,无法计算最大值") # 输出:列表为空,无法计算最大值 # 求平均值:先判断是否为空 if empty_list: average = sum(empty_list) / len(empty_list) else: average = 0 # 或根据业务需求设为None print(f"空列表的平均值:{average}") # 输出:0

2. 包含非数值元素的列表

若列表中混合了字符串、None 等非数值元素,直接使用sum()/max()会报错(TypeError: unsupported operand type(s) for +: 'int' and 'str'),需先过滤或转换元素。

场景 1:过滤非数值元素(保留 int/float)

python

mixed_list = [1, 2, "3", None, 4.5, "abc"] # 过滤出仅int/float类型的元素 num_only = [x for x in mixed_list if isinstance(x, (int, float))] print(f"过滤后的数值列表:{num_only}") # 输出:[1, 2, 4.5] # 统计计算 if num_only: total = sum(num_only) max_num = max(num_only) min_num = min(num_only) average = total / len(num_only) print(f"总和:{total},最大值:{max_num},最小值:{min_num},平均值:{average:.2f}") else: print("无有效数值元素")
场景 2:将可转换的字符串数值转为数值类型

python

mixed_list = [1, "2", "3.5", None, "abc"] # 尝试将元素转为数值类型,失败则跳过 num_list = [] for x in mixed_list: try: # 先转float,兼容整数和浮点数字符串 num = float(x) num_list.append(num) except (ValueError, TypeError): continue print(f"转换后的数值列表:{num_list}") # 输出:[1.0, 2.0, 3.5] if num_list: average = sum(num_list) / len(num_list) print(f"平均值:{average}") # 输出:2.1666666666666665

3. 包含 NaN/Inf 的数值列表

若列表中有numpy.nan(非数值)或float('inf')(无穷大),内置函数会返回非预期结果,需用numpy库处理。

python

import numpy as np # 包含NaN和Inf的列表 num_list = [1, 2, np.nan, 4, float('inf')] # 用numpy计算(自动忽略NaN,Inf需特殊处理) arr = np.array(num_list) total = np.nansum(arr) # 忽略NaN求和 max_num = np.nanmax(arr) # 忽略NaN求最大值 min_num = np.nanmin(arr) # 忽略NaN求最小值 average = np.nanmean(arr) # 忽略NaN求平均值 print(f"总和:{total},最大值:{max_num},最小值:{min_num},平均值:{average}") # 输出:总和:7.0,最大值:inf,最小值:1.0,平均值:2.3333333333333335

三、自定义函数:理解底层实现原理

内置函数虽方便,但手动实现统计功能能帮助理解底层逻辑,适合学习和自定义扩展(如按条件统计)。

1. 自定义函数求总和

python

def my_sum(lst): """自定义求和函数""" total = 0 for num in lst: # 仅累加数值类型 if isinstance(num, (int, float)): total += num return total num_list = [1, 2, 3, 4, 5] print(f"自定义求和:{my_sum(num_list)}") # 输出:15

2. 自定义函数求最大值

python

def my_max(lst): """自定义求最大值函数(处理空列表)""" if not lst: raise ValueError("列表不能为空") # 或返回None # 初始化最大值为第一个数值元素 max_num = None for num in lst: if isinstance(num, (int, float)): if max_num is None or num > max_num: max_num = num if max_num is None: raise ValueError("列表中无有效数值元素") return max_num num_list = [10, 5, 8, 20, 3] print(f"自定义求最大值:{my_max(num_list)}") # 输出:20

3. 自定义函数求最小值

python

def my_min(lst): """自定义求最小值函数""" if not lst: raise ValueError("列表不能为空") min_num = None for num in lst: if isinstance(num, (int, float)): if min_num is None or num < min_num: min_num = num if min_num is None: raise ValueError("列表中无有效数值元素") return min_num num_list = [10, 5, 8, 20, 3] print(f"自定义求最小值:{my_min(num_list)}") # 输出:3

4. 自定义函数求平均值

python

def my_average(lst): """自定义求平均值函数""" total = my_sum(lst) # 统计有效数值元素个数 count = len([x for x in lst if isinstance(x, (int, float))]) if count == 0: raise ValueError("列表中无有效数值元素") return total / count num_list = [1, 2, 3, 4, 5] print(f"自定义求平均值:{my_average(num_list)}") # 输出:3.0

四、进阶技巧:高效处理大型列表

当列表元素数量达到百万级甚至千万级时,使用numpy库或pandas库能显著提升计算效率,比纯 Python 循环快数十倍。

1. 用numpy处理大型数值列表

numpy是 Python 科学计算的核心库,其数组操作基于 C 语言实现,效率极高。

python

import numpy as np # 生成包含100万个随机数的列表 big_list = np.random.randint(0, 100, size=1000000).tolist() # 转换为numpy数组 arr = np.array(big_list) # 统计计算 total = arr.sum() max_num = arr.max() min_num = arr.min() average = arr.mean() print(f"大型列表的总和:{total},最大值:{max_num},最小值:{min_num},平均值:{average:.2f}")

2. 用pandas处理带标签的列表

pandas适合处理结构化数据,可快速统计并支持更多分析功能。

python

import pandas as pd num_list = [1, 2, 3, 4, 5] # 转换为pandas Series s = pd.Series(num_list) # 统计计算 total = s.sum() max_num = s.max() min_num = s.min() average = s.mean() # 一次性获取多个统计指标 describe = s.describe() print(f"详细统计信息:\n{describe}")

3. 统计二维列表的全局 / 行 / 列统计值

对于二维列表(矩阵),可分别计算全局、每行、每列的统计值。

python

# 二维数值列表 matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] # 全局统计 flat_list = [num for row in matrix for num in row] print(f"全局总和:{sum(flat_list)},全局平均值:{sum(flat_list)/len(flat_list)}") # 每行的统计 row_stats = [(sum(row), max(row), min(row), sum(row)/len(row)) for row in matrix] for i, (total, max_num, min_num, avg) in enumerate(row_stats): print(f"第{i+1}行:总和{total},最大值{max_num},最小值{min_num},平均值{avg}") # 每列的统计(用numpy更方便) arr = np.array(matrix) col_sum = arr.sum(axis=0) # 列求和 col_max = arr.max(axis=0) # 列求最大值 col_min = arr.min(axis=0) # 列求最小值 col_avg = arr.mean(axis=0) # 列求平均值 print(f"每列的总和:{col_sum},每列的平均值:{col_avg}")

五、总结

Python 列表的统计操作(求和、最大、最小、平均)是基础且高频的需求,掌握不同场景下的实现方法能大幅提升开发效率:

  1. 日常小列表:直接使用sum()max()min()+len(),简单高效;
  2. 特殊场景:空列表先判断、非数值元素先过滤 / 转换、NaN 值用numpy处理;
  3. 学习原理:自定义函数实现统计逻辑,理解底层遍历与判断;
  4. 大型列表:用numpypandas提升计算效率,支持更复杂的分析需求。

通过本文的方法,你可以轻松应对各种列表统计场景,让 Python 列表的数值分析变得游刃有余!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 21:14:08

5分钟快速上手LeagueAkari:英雄联盟智能自动化实战指南

5分钟快速上手LeagueAkari&#xff1a;英雄联盟智能自动化实战指南 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为错…

作者头像 李华
网站建设 2026/2/5 8:25:38

如何在30分钟内完成Open-AutoGLM一键部署?内附完整脚本

第一章&#xff1a;Open-AutoGLM部署概述Open-AutoGLM 是一个面向自动化自然语言处理任务的开源大语言模型推理与部署框架&#xff0c;专为高效集成、灵活扩展和低延迟服务而设计。该框架支持多后端推理引擎&#xff0c;可在 CPU、GPU 及混合硬件环境下运行&#xff0c;适用于从…

作者头像 李华
网站建设 2026/2/5 9:00:41

NVIDIA Profile Inspector完整指南:解锁显卡隐藏性能的终极教程

NVIDIA Profile Inspector完整指南&#xff1a;解锁显卡隐藏性能的终极教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼吗&#xff1f;想要挖掘显卡的全部潜力却不知…

作者头像 李华
网站建设 2026/2/5 16:13:19

Blender 3MF插件终极指南:3D打印工作流完整解决方案

Blender 3MF插件终极指南&#xff1a;3D打印工作流完整解决方案 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender 3MF插件为3D打印工作流提供了完整的解决方案&…

作者头像 李华
网站建设 2026/2/5 8:59:54

被数据分析难哭?paperzz 让你把 “数据乱麻” 变成 “结论图表”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 数据分析https://www.paperzz.cc/dataAnalysis 当你对着 Excel 里几百行数据第 N 次发呆时&#xff0c;可能还没意识到&#xff1a;数据分析这件事&#xff0c;早就不用 “对着教程敲代码” 了…

作者头像 李华
网站建设 2026/2/5 17:10:18

端侧大模型部署实战(基于Open-AutoGLM的轻量化协同优化方案)

第一章&#xff1a;端侧大模型与 Open-AutoGLM 协同进化的时代机遇随着边缘计算能力的持续跃升&#xff0c;端侧大模型正从理论探索走向规模化落地。在隐私保护、低延迟响应和离线可用性等核心诉求的驱动下&#xff0c;将大语言模型部署于终端设备已成为技术演进的关键路径。Op…

作者头像 李华