列表排序是 Python 编程中最常用、最基础的操作之一,不管是处理数据、开发项目还是日常刷题,都离不开它。
今天就用最简单、最清晰的步骤,带你吃透 Python 列表排序,新手也能直接上手!
一、Python 列表排序的 2 个核心方法
Python 给列表准备了2 种排序工具,用法完全不同,先分清它们:
1. list.sort() —— 原地排序(直接修改原列表)
2. sorted(list) —— 新建排序(保留原列表)
二、基础排序(最常用)
1. 升序排序(从小到大,默认)
方法 1:sort() 原地升序
# 数字列表
nums = [3, 1, 4, 2, 5]
nums.sort()
print(nums) # 输出:[1, 2, 3, 4, 5]
# 字符串列表(按字母顺序)
words = ["banana", "apple", "cherry"]
words.sort()
print(words) # 输出:['apple', 'banana', 'cherry']
方法 2:sorted() 新建升序
nums = [3, 1, 4, 2, 5]
new_nums = sorted(nums)
print("原列表:", nums) # 原列表不变:[3, 1, 4, 2, 5]
print("新列表:", new_nums)# 排序后:[1, 2, 3, 4, 5]
2. 降序排序(从大到小)
只需要加一个参数:reverse=True
sort() 降序
nums = [3, 1, 4, 2, 5]
nums.sort(reverse=True)
print(nums) # 输出:[5, 4, 3, 2, 1]
sorted() 降序
nums = [3, 1, 4, 2, 5]
new_nums = sorted(nums, reverse=True)
print(new_nums) # 输出:[5, 4, 3, 2, 1]
三、进阶:自定义排序(按规则排序)
真实场景中,我们经常需要按指定规则排序,比如:
这时候用 key 参数!
1. 按字符串长度排序
words = ["python", "java", "c", "javascript"]
# 按字符串长度升序
words.sort(key=len)
print(words) # 输出:['c', 'java', 'python', 'javascript']
2. 按字典的某个值排序(超级常用)
# 学生列表:包含姓名和分数
students = [
{"name": "小明", "score": 88},
{"name": "小红", "score": 95},
{"name": "小刚", "score": 76}
]
# 按分数升序排序
students.sort(key=lambda x: x["score"])
print(students)
# 按分数降序排序
students.sort(key=lambda x: x["score"], reverse=True)
3. 按绝对值排序
nums = [-3, 1, -4, 2]
nums.sort(key=abs) # 按绝对值大小排序
print(nums) # 输出:[1, 2, -3, -4]
四、高级:复杂对象排序
如果是自定义类的对象,也能轻松排序:
classStudent:
def__init__(self, name, age):
self.name = name
self.age = age
# 创建对象列表
stu_list = [Student("小明", 18), Student("小红", 16), Student("小刚", 20)]
# 按年龄排序
stu_list.sort(key=lambda x: x.age)
五、快速反转列表(不排序,仅反转)
不是排序,但经常和排序一起用:
nums = [1, 2, 3, 4, 5]
nums.reverse() # 原地反转
print(nums) # 输出:[5, 4, 3, 2, 1]
六、2 个方法对比总结(必看)
| | | |
|---|
list.sort() | 是 | None | |
sorted(list) | 否 | | |
七、新手常见坑
# 错误写法
nums = [3,1,2]
new_nums = nums.sort() # new_nums 是 None!
print(new_nums)
# 报错!
[1, "a", 3].sort()
八、一句话总结
总结
- Python 列表排序核心是
sort()(原地) 和 sorted()(新建) - 基础排序:升序(默认)、降序(
reverse=True) - 日常开发优先用
sorted(),更安全(不破坏原数据)