Python函数:内置函数(len/max/min/sorted等)详解
本章学习目标
深入理解Python高频内置函数 len、max、min、sorted、sum、zip 等核心概念、底层原理与使用规范,熟练掌握各类内置函数的基础用法、参数配置、进阶场景与避坑技巧,区分易混淆内置函数的差异,掌握生产环境最佳实践。本文属于《Python从入门到精通教程》Python函数篇(第四篇)。
在上一章,我们学习了 Python函数:匿名函数lambda的定义与使用场景 ,掌握了简洁高效的匿名函数编写与实战用法。本章我们将聚焦Python原生内置函数,内置函数是Python无需导入、开箱即用的核心工具,是日常数据处理、业务开发的基础核心,也是Python极简编程的核心体现。
一、核心概念与背景
1.1 什么是Python内置函数?
基本定义:
Python内置函数是Python解释器自带、无需手动导入模块、可直接调用的原生函数,随Python环境安装即可使用。内置函数封装了底层复杂的逻辑,极大简化了代码编写难度,是Pythonic编程风格的核心组成部分。
我们日常开发中最常用的高频内置函数:len()、max()、min()、sorted()、sum()、zip()、map()、filter(),覆盖90%以上的基础数据处理场景。
1.2 内置函数的核心价值与重要性
重要性分析:
-
极致高效:内置函数底层由C语言实现,执行速度远快于自定义Python循环代码
-
代码极简:一行代码实现数据统计、排序、遍历筛选,大幅减少冗余代码
-
通用性强:适配列表、元组、字符串、字典等绝大多数可迭代对象
-
稳定性高:官方原生封装,无BUG隐患,兼容性适配所有Python版本
-
开发必备:基础开发、数据分析、算法刷题、项目实战高频必用
1.3 典型应用场景
| 场景类型 | 具体应用 | 核心使用函数 |
|---|---|---|
| 数据统计 | 统计数据长度、最值、总和、均值计算 | len、max、min、sum |
| 数据排序 | 列表、元组、字符串正向/反向排序、自定义排序 | sorted |
| 数据整合 | 多序列配对合并、批量数据映射转换 | zip、map |
| 数据筛选 | 过滤不符合条件的数据、清洗无效数据 | filter |
二、高频内置函数逐行详解(实战级)
2.1 len():获取对象长度/元素个数
核心作用:统计可迭代对象的元素个数,支持字符串、列表、元组、字典、集合等。
语法格式 :len(object)
python
# 字符串长度
str_data = "Python内置函数"
print(len(str_data)) # 8
# 列表元素个数
list_data = [1, 2, 3, 4, 5]
print(len(list_data)) # 5
# 字典统计键值对个数
dict_data = {"name": "张三", "age": 20}
print(len(dict_data)) # 2
避坑点:不支持整数、浮点数、数字类型,直接传入会直接报错。
2.2 max() / min():获取最值
核心作用:max() 获取最大值,min() 获取最小值,支持多参数、可迭代对象,搭配key可实现自定义规则最值获取。
语法格式 :max(*args, key=None) / min(*args, key=None)
python
# 基础用法:序列最值
nums = [12, 45, 7, 89, 23]
print(max(nums)) # 89
print(min(nums)) # 7
# 多参数直接比较
print(max(10, 30, 20)) # 30
# 进阶:key自定义规则(按字符串长度取最值)
words = ["python", "java", "go", "javascript"]
print(max(words, key=lambda x: len(x))) # javascript
print(min(words, key=lambda x: len(x))) # go
2.3 sorted():全局排序函数(重点)
核心作用 :对可迭代对象进行排序,返回新序列,不修改原数据,支持升降序、自定义规则排序,是开发最常用的排序方式。
语法格式 :sorted(iterable, reverse=False, key=None)
-
reverse:False 升序(默认),True 降序
-
key:自定义排序规则,接收函数
python
# 基础升序
nums = [5, 2, 9, 1, 5, 6]
new_nums1 = sorted(nums)
print("升序排序:", new_nums1) # [1, 2, 5, 5, 6, 9]
# 降序排序
new_nums2 = sorted(nums, reverse=True)
print("降序排序:", new_nums2) # [9, 6, 5, 5, 2, 1]
# 自定义排序:按数字绝对值排序
abs_nums = [-5, 3, -9, 1]
new_nums3 = sorted(abs_nums, key=lambda x: abs(x))
print("绝对值排序:", new_nums3) # [1, 3, -5, -9]
# 原数据不变
print("原列表:", nums) # [5, 2, 9, 1, 5, 6]
拓展区别 :列表自带的 sort() 方法会修改原列表、无返回值;sorted() 生成新列表、不改动原数据,生产环境优先使用sorted。
2.4 sum():序列求和
核心作用:对数值型可迭代对象求和,支持设置初始值。
语法格式 :sum(iterable, start=0)
python
# 基础求和
nums = [1, 2, 3, 4, 5]
print(sum(nums)) # 15
# 设置初始值(总和+初始值)
print(sum(nums, start=10)) # 25
避坑点:仅支持数值类型,字符串序列无法直接求和。
2.5 zip():多序列配对整合
核心作用:将多个可迭代对象对应位置元素打包成元组,返回迭代器,常用于多列表关联遍历。
python
name_list = ["张三", "李四", "王五"]
age_list = [18, 20, 19]
# 配对整合
zip_data = zip(name_list, age_list)
print(list(zip_data)) # [('张三', 18), ('李四', 20), ('王五', 19)]
# 配对遍历
for name, age in zip(name_list, age_list):
print(f"姓名:{name},年龄:{age}")
特性:以最短序列为准,多余元素自动舍弃。
2.6 map()/filter():映射与筛选
map:对序列所有元素批量执行同一规则,实现数据批量转换
filter:根据规则过滤序列,保留符合条件的元素
python
# map批量转换:数字转平方
nums = [1, 2, 3, 4]
square_nums = list(map(lambda x: x ** 2, nums))
print(square_nums) # [1, 4, 9, 16]
# filter数据筛选:保留偶数
even_nums = list(filter(lambda x: x % 2 == 0, nums))
print(even_nums) # [2, 4]
三、内置函数综合实战案例
结合以上高频函数,实现学生成绩数据统计分析综合案例,适配真实业务场景:
python
# 学生成绩数据
student_scores = [
("张三", 88),
("李四", 95),
("王五", 76),
("赵六", 92)
]
# 1. 统计学生人数
total = len(student_scores)
print(f"学生总人数:{total}")
# 2. 获取最高分、最低分学生
max_score = max(student_scores, key=lambda x: x[1])
min_score = min(student_scores, key=lambda x: x[1])
print(f"最高分:{max_score[0]},分数:{max_score[1]}")
print(f"最低分:{min_score[0]},分数:{min_score[1]}")
# 3. 成绩排序(降序)
sort_scores = sorted(student_scores, key=lambda x: x[1], reverse=True)
print("成绩降序排名:", sort_scores)
# 4. 计算总分、平均分
score_list = [score for name, score in student_scores]
total_score = sum(score_list)
avg_score = total_score / total
print(f"总分:{total_score},平均分:{avg_score:.2f}")
运行结果:
python
学生总人数:4
最高分:李四,分数:95
最低分:王五,分数:76
成绩降序排名: [('李四', 95), ('赵六', 92), ('张三', 88), ('王五', 76)]
总分:351,平均分:87.75
四、常见报错与解决方案
4.1 max/min 空序列报错
报错现象 :ValueError: max() arg is an empty sequence
原因:对空列表、空序列执行最值获取
解决方案:先判断序列是否为空,再执行操作
4.2 sorted 多类型排序报错
报错现象:不同数据类型无法比较(如int和str)
解决方案:统一序列数据类型,通过key强制类型转换
4.3 sum 非数值序列报错
解决方案:过滤非数值元素,确保序列全部为int/float类型
五、内置函数最佳实践
-
优先使用内置函数:数据统计、排序、筛选优先用原生内置函数,替代自定义循环,效率更高、代码更简洁
-
区分sorted与sort:需要保留原数据用sorted(),无需保留原数据用list.sort()
-
搭配lambda使用:复杂排序、最值筛选场景,结合匿名函数实现自定义规则
-
增加空值判断:处理未知数据时,先判断序列非空,避免空序列报错
-
避免重复调用:多次使用的统计结果,提前赋值存储,减少重复计算
六、本章小结
6.1 核心要点回顾
-
内置函数原生无需导入、执行高效,是Python基础开发核心工具
-
len统计长度、max/min获取最值、sum求和,适配所有可迭代对象
-
sorted支持自定义排序,不修改原数据,是排序首选方案
-
zip/map/filter实现数据整合、转换、筛选,适配批量数据处理
-掌握常见报错避坑点,适配生产环境稳定开发
6.2 学习建议
内置函数看似简单,却是Python高效编程的根基。建议新手摒弃手写循环实现统计、排序的习惯,熟练掌握内置函数的自定义key规则,能够大幅提升代码简洁度与运行效率。