网站首页 > 技术文章 正文
一、列表排序:高效整理数据
1. list.sort()方法(原地排序)
- 定义:直接修改原列表,不返回新列表
- 语法:list.sort(key=None, reverse=False)
- 适用场景:原数据可修改且需节省内存时
- 技巧:
- 性能优于sorted()(无需创建新对象)
- 搭配key参数实现自定义排序规则
files = ["报告2023.docx", "总结2022.xlsx", "数据2024.csv"]
files.sort(key=lambda x: int(x[2:6])) # 按年份升序排序
print(files) # 输出:['总结2022.xlsx', '报告2023.docx', '数据2024.csv']
2. sorted()函数(新建排序列表)
- 定义:返回新排序列表,原数据不变
- 语法:sorted(iterable, key=None, reverse=False)
- 适用场景:
- 需保留原始数据
- 排序非列表对象(如元组、字典键值)
employees = [{"name": "张三", "age": 28}, {"name": "李四", "age": 25}]
sorted_emps = sorted(employees, key=lambda x: x["age"], reverse=True) # 按年龄降序
print(sorted_emps) # [{'name': '张三', 'age': 28}, {'name': '李四', 'age': 25}]
3. 核心参数详解
参数 | 作用 | 办公场景案例 |
key | 指定排序依据的函数 | key=len 按文件名长度排序 |
reverse | True降序,False升序(默认) | reverse=True 按文件大小倒序排列 |
高级用法:
# 多级排序:先按部门,再按工资
staff = [
{"dept": "财务", "salary": 8000},
{"dept": "IT", "salary": 9000},
{"dept": "财务", "salary": 7500}
]
staff.sort(key=lambda x: (x["dept"], x["salary"]))
二、列表推导式:高效生成数据
1. 基础语法
- 定义:单行代码生成新列表
- 语法:[表达式 for 变量 in 可迭代对象]
- 适用场景:数据转换、过滤
# 生成1-10的平方列表
squares = [x**2 for x in range(1, 11)] # [1, 4, 9, ..., 100]
2. 带条件的推导式
- 类型:
- 过滤条件:[x for x in iterable if 条件]
- 条件赋值:[x if 条件 else y for ...]
# 筛选Excel文件并转小写
all_files = ["data.xlsx", "报告.doc", "预算.xlsx"]
excel_files = [f.lower() for f in all_files if f.endswith(".xlsx")]
# 结果:['data.xlsx', '预算.xlsx']
# 数值分类:大于500标"高",否则标"低"
values = [300, 600, 450]
labels = ["高" if v > 500 else "低" for v in values] # ['低', '高', '低']
3. 嵌套循环推导式
- 语法:[操作 for 子循环1 in A for 子循环2 in B]
- 场景:多层级数据展开(如Excel多行表处理)
# 二维表格数据扁平化
table_data = [[1, 2], [3, 4]]
flat_data = [num for row in table_data for num in row] # [1, 2, 3, 4]
# 生成文件路径组合(目录+文件名)
folders = ["D:/报告", "E:/数据"]
files = ["2023.txt", "2024.txt"]
paths = [f"{folder}/{file}" for folder in folders for file in files]
# 结果:['D:/报告/2023.txt', 'D:/报告/2024.txt', 'E:/数据/2023.txt', ...]
三、选择指南
场景 | 推荐方案 | 原因 |
修改原列表且节省内存 | list.sort() | 原地操作,无额外内存开销 |
保留原数据或排序非列表对象 | sorted() | 返回新对象不影响原数据 |
快速生成新列表 | 列表推导式 | 代码简洁,执行效率高 |
复杂逻辑或多步操作 | 传统for循环 | 可读性更强 |
提示:
1. 列表推导式中避免嵌套超过两层
2. sort()返回值是None!勿写new_list = old_list.sort()
3. 办公场景优先用sorted()防止误改原始数据
四、实战:处理员工数据
# 原始数据:姓名,部门,工资
raw_data = "张三-IT-8000;李四-财务-7500;王五-IT-9000"
# 1. 分割字符串并结构化
employees = [
{"name": item.split("-")[0],
"dept": item.split("-")[1],
"salary": int(item.split("-")[2])}
for item in raw_data.split(";")
]
# 2. 按部门升序+工资降序排序
employees_sorted = sorted(
employees,
key=lambda x: (x["dept"], -x["salary"]) # 工资降序技巧:取负数
)
# 3. 生成高薪人员名单(>8000)
high_salary_names = [e["name"] for e in employees if e["salary"] > 8000]
print("排序后:", employees_sorted)
print("高薪人员:", high_salary_names)
输出:
排序后: [
{'name':'李四', 'dept':'财务', 'salary':7500},
{'name':'王五', 'dept':'IT', 'salary':9000},
{'name':'张三', 'dept':'IT', 'salary':8000}
]
高薪人员: ['王五']
- 上一篇: python入门012:复制列表
- 下一篇: Python中的列表详解及示例
猜你喜欢
- 2025-08-03 Python列表方法append和extend的区别
- 2025-08-03 Python列表集合操作介绍?
- 2025-08-03 python数据类型之列表、字典、元组、集合及操作
- 2025-08-03 Python学不会来打我(11)列表list详解:用法、场景与类型转换
- 2025-08-03 Python骚操作从列表推导和生成器表达式开始
- 2025-08-03 Python中的列表详解及示例
- 2025-08-03 python入门012:复制列表
- 2025-08-03 Python列表元素求偶:简洁实现与解析
- 2025-08-03 python入门经典案例—list列表翻转列表
- 2025-08-03 Python教程-列表排序
- 08-03Python列表方法append和extend的区别
- 08-03Python列表集合操作介绍?
- 08-03python数据类型之列表、字典、元组、集合及操作
- 08-03Python学不会来打我(11)列表list详解:用法、场景与类型转换
- 08-03Python骚操作从列表推导和生成器表达式开始
- 08-03Python中的列表详解及示例
- 08-03Python自动化办公应用学习笔记20—列表排序、列表推导式
- 08-03python入门012:复制列表
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)