当前位置: 首页 > news >正文

Python 中的排序排序函数及区别

Python 中的排序排序函数及区别

在 Python 中,常用的排序功能主要通过两种方式实现:sorted() 内置函数和列表的 sort() 方法。它们都能完成排序任务,但在使用场景和特性上有显著区别。

一、两种核心排序工具

1. sorted() 内置函数

功能:对可迭代对象进行排序,返回一个新的排序后的列表。

基本语法

sorted(iterable, key=None, reverse=False)

参数说明

  • iterable:需要排序的可迭代对象(列表、元组、字符串、字典等)
  • key:排序依据的函数(可选)
  • reverse:排序方向,False 为升序(默认),True 为降序

示例

# 对列表排序
nums = [3, 1, 4, 1, 5]
sorted_nums = sorted(nums)  # [1, 1, 3, 4, 5]# 对元组排序(返回列表)
tup = (5, 2, 7)
sorted_tup = sorted(tup)    # [2, 5, 7]# 对字符串排序(按字符编码)
s = "cab"
sorted_s = sorted(s)        # ['a', 'b', 'c']

2. list.sort() 方法

功能:对列表本身进行排序,修改原列表,无返回值(返回 None)。

基本语法

list.sort(key=None, reverse=False)

参数说明:与 sorted() 相同,但只能用于列表对象。

示例

nums = [3, 1, 4, 1, 5]
nums.sort()  # 原列表被修改
print(nums)  # [1, 1, 3, 4, 5]

二、核心区别对比

特性 sorted() 函数 list.sort() 方法
适用对象 所有可迭代对象(列表、元组、字符串等) 仅适用于列表(list 类型)
是否修改原对象 不修改,返回新的排序列表 修改原列表,无返回值(返回 None
返回值 排序后的新列表 None
内存占用 会创建新列表,占用额外内存 原地排序,内存效率更高
使用场景 需要保留原数据或对非列表排序 仅对列表排序且可修改原列表

三、相同点:排序规则与参数

两种排序方式都支持相同的排序规则和参数:

1. key 参数:自定义排序依据

通过指定函数作为 key,可以按自定义规则排序:

# 按字符串长度排序(sorted示例)
words = ['apple', 'banana', 'cherry']
sorted_words = sorted(words, key=len)  # ['apple', 'banana', 'cherry']# 按绝对值排序(sort示例)
nums = [-3, 1, -5, 2]
nums.sort(key=abs)  # [1, 2, -3, -5]

2. reverse 参数:控制排序方向

# 降序排序
nums = [3, 1, 4]
print(sorted(nums, reverse=True))  # [4, 3, 1]nums.sort(reverse=True)
print(nums)  # [4, 3, 1]

3. 稳定性

两者都是稳定排序:当元素的值相等时,会保留它们在原序列中的相对顺序。

people = [('Alice', 25), ('Bob', 20), ('Charlie', 25)]# 按年龄排序,年龄相同则保持原顺序
sorted_people = sorted(people, key=lambda x: x[1])
# [('Bob', 20), ('Alice', 25), ('Charlie', 25)] (Alice在Charlie前,与原顺序一致)

四、其他排序相关工具

1. reversed() 函数

不是排序函数,但可用于反转序列(返回迭代器):

nums = [1, 2, 3]
reversed_nums = list(reversed(nums))  # [3, 2, 1](不排序,仅反转)

2. 字典的排序

对字典排序时,sorted() 会按键排序,或通过 key 参数指定按值排序:

d = {'b': 2, 'a': 1, 'c': 3}# 按键排序(返回键的列表)
sorted_keys = sorted(d)  # ['a', 'b', 'c']# 按值排序(返回键值对元组的列表)
sorted_items = sorted(d.items(), key=lambda x: x[1])  # [('a', 1), ('b', 2), ('c', 3)]

五、如何选择?

  1. 当需要保留原数据时,用 sorted()
  2. 当处理列表且允许修改原数据时,用 list.sort()(内存效率更高)
  3. 当需要对非列表对象(如元组、字符串)排序时,必须用 sorted()
  4. 当需要链式操作时,用 sorted()(因为它有返回值):
    # 链式操作示例
    result = sorted(nums, key=abs)[:3]  # 排序后取前3个元素
    

总结

  • sorted(iterable):通用排序工具,返回新列表,不修改原数据,适用于所有可迭代对象。
  • list.sort():列表专属方法,原地排序,无返回值,内存效率高。

两者核心排序逻辑一致,都支持 keyreverse 参数,选择时主要根据是否需要保留原数据和操作对象类型来决定。

http://www.hskmm.com/?act=detail&tid=26952

相关文章:

  • RL | 速读 IJCAI 2025 的强化学习论文
  • IDM弹窗解决 - -一叶知秋
  • PHP+MySQL开发语言 在线下单订水送水小脚本源码及搭建指南
  • Sliding Window Algorithm
  • 国庆模拟赛总结
  • 深入解析:video-audio-extractor:视频转换为音频
  • 10.8 CSP-JS 模拟赛 T4. discover
  • 20251008 模拟测 总结
  • VuePress v2是否支持Vue2的配置?
  • 新人UP主:晓牛开发者的第一篇自我介绍博客测试发布
  • ubuntu20.04服务器版安装中文输入法分享
  • DeCLIP
  • 19_win11_wsl_linux_配置jdk_mvn
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名CTF资源库需求洞察
  • 计蒜客 A1108 百度地图的实时路况
  • 学生管理系统面向对象问题分析
  • 解码Linux环境搭建
  • dns 委派
  • 几个重要的偏微分方程(二)
  • 如何测试台式机电源
  • 「SCOI2015」小凸解密码题解
  • 2025免费好用的度数符号的神器
  • 折腾笔记[31]-在线转换吉卜力风格图片
  • 2025 风淋室厂家 TOP 品牌推荐排行榜,不锈钢风淋室,防爆风淋室,自动门风淋室,风淋门公司推荐
  • 计算机视觉的现状与未来挑战
  • #20232408 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • reLeetCode 热题 100- 239. 滑动窗口最大值 队列 - MKT
  • 深入解析:三维坐标转换
  • ToDo-List EveryDay
  • 英语_阅读_Water and digital life_待读