找回密码
 立即注册
搜索
查看: 306|回复: 5

sort()方法和sorted()函数的区别

[复制链接]

27

主题

30

回帖

194

积分

管理员

积分
194
发表于 2026-6-17 20:08:44 | 显示全部楼层 |阅读模式
在 Python 中,sort() 和 sorted() 都是排序工具,但它们的使用方式和底层机制有本质区别。
最核心的区别是:sort() 会修改原列表,而 sorted() 会生成新列表。
为了帮你快速记忆和区分,我整理了一个对比表格,然后针对关键点做详细说明。

核心区别速览表


特性
list.sort()
sorted()
类型列表的方法Python 内置函数
操作对象只能用于列表可用于任何可迭代对象(字符串、元组、字典、集合等)
修改原数据会修改(原地排序)不会修改(返回新列表)
返回值返回 None返回一个新的列表
内存占用较低(原地操作)较高(需复制一份数据)
链式调用不可以(因为返回None)可以(因为返回列表)

回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 20:14:50 | 显示全部楼层
1. 使用方式不同
list.sort():必须通过列表对象调用。

  1. nums = [3, 1, 4]
  2. nums.sort()  # 直接修改 nums,此时 nums 变成 [1, 3, 4]
  3. print(nums)  # 输出:[1, 3, 4]
复制代码
sorted():直接作为函数调用,传入可迭代对象。
  1. nums = [3, 1, 4]
  2. new_nums = sorted(nums)  # nums 保持不变,生成新列表 [1, 3, 4]
  3. print(nums)      # 输出:[3, 1, 4] (原数据没变)
  4. print(new_nums)  # 输出:[1, 3, 4]
复制代码

回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 20:17:47 | 显示全部楼层
2. 适用数据类型不同
  • list.sort() 非常“专一”,只能处理列表。
  • sorted() 非常“博爱”,可以处理字符串、元组、字典键、集合等任何可迭代对象。
    1. # 对元组排序
    2. t = (3, 1, 2)
    3. print(sorted(t))  # 输出:[1, 2, 3] (返回列表)

    4. # 对字符串排序(按字符编码)
    5. s = "312"
    6. print(sorted(s))  # 输出:['1', '2', '3']

    7. # 对字典排序(默认按键排序)
    8. d = {'b': 2, 'a': 1}
    9. print(sorted(d))  # 输出:['a', 'b'] (返回排序后的键列表)
    复制代码

回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 20:23:31 | 显示全部楼层
3. 返回值与链式调用陷阱
这是初学者最容易踩的坑。因为 list.sort() 返回 None,如果你这样写代码会出错:
  1. nums = [3, 1, 2]
  2. # 错误示例:试图打印排序后的结果
  3. print(nums.sort())  # 输出:None (因为sort()不返回值)

  4. # 错误示例:试图链式调用
  5. # nums.sort().reverse()  # 报错:AttributeError,因为None没有reverse方法
复制代码
正确的做法是分开写:
  1. nums.sort()
  2. nums.reverse()  # 先排序,再反转
复制代码
sorted() 返回列表,因此可以链式调用:

  1. nums = [3, 1, 2]
  2. result = sorted(nums, reverse=True)  # 直接一步到位
复制代码


回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 20:29:50 | 显示全部楼层
4. 进阶关键参数(两者通用)
在参数上,两者都支持 key 和 reverse 参数,用法完全一致。
  • reverse:布尔值,True 表示降序,默认为 False 升序。
  • key:指定一个函数,用于从每个元素中提取“比较键”。

  1. students = [('Bob', 75), ('Alice', 90), ('Charlie', 80)]

  2. # sort 用法
  3. students.sort(key=lambda x: x[1], reverse=True)  # 按分数降序,直接修改原列表

  4. # sorted 用法
  5. sorted_students = sorted(students, key=lambda x: x[1])  # 按分数升序,生成新列表
复制代码

回复

使用道具 举报

27

主题

30

回帖

194

积分

管理员

积分
194
 楼主| 发表于 2026-6-17 20:31:05 | 显示全部楼层
5. 性能与内存考量(补充)

  • 如果你的数据量非常大,且不再需要原始数据,list.sort() 更优,因为它原地操作,省内存。
  • 如果你需要保留原始数据做其他用途,或者处理的是元组、集合等不可变对象,只能选择 sorted()。



一句话总结

list.sort() 是列表的方法,会原地修改列表并返回 None;而 sorted() 是内置函数,会接收任何可迭代对象,并返回一个新的排序后列表,原数据保持不变。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|老村长论坛

GMT+8, 2026-7-27 23:35 , Processed in 0.035942 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表