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

news/2025/10/8 21:13:59/文章来源:https://www.cnblogs.com/wangya216/p/19130119

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.mzph.cn/news/931945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

房地产网站建设哪家有效果网站优化公司排行

free命令 ​free是指查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。 作者 作者:Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

wordpress 表说明长沙网站包年优化

awk(是一种处理文本文件的应用程序,它依次处理文件的每一行,并读取里面的每一个字段。) awk 包含几个特殊的内建变量(可直接用)如下所示: 1、获取根分区剩余大小 #可以使用df -h命令来查看所有…

岗贝路网站建设产品设计英文

2024年8月7日至9日,一场生物制造领域的盛会将在上海新国际博览中心闪亮登场。那就是2024上海国际合成生物学与绿色生物制造展览会。这场盛会将同期举办2024第13届上海国际生物发酵展,形成了一个强大的“生物军团”,展现出生物科技领域的无限魅…

搭建asp虚拟主机网站wordpress同分类文章

碰到的问题 上传Datafrane格式的数据到数据库 会碰见很多错误 举几个很普遍遇到的问题(主要以SqlServer举例) 这里解释下 将截断字符串或二进制数据 这个是字符长度超过数据库设置的长度 然后还有字符转int失败 或者字符串转换日期/或时间失败 这个是碰到的需要解决的最多的问…

长春餐饮网站建设wordpress页面构造器

分类目录:《自然语言处理从入门到应用》总目录 在本文中,我们将学习如何在LangChain中创建简单的链式连接并添加组件以及运行它。链式连接允许我们将多个组件组合在一起,创建一个统一的应用程序。例如,我们可以创建一个链式连接&a…

RL | 速读 IJCAI 2025 的强化学习论文

速读一下 IJCAI 2025 的 RL 相关论文。目录359 Multi-granularity Knowledge Transfer for Continual Reinforcement Learning - 为持续 RL 而设计的多粒度知识迁移一、 研究背景与核心痛点(The Gap)二、 动机与故事…

Superhumanism

The civilizeds support Superhumanism. But they didnt support the Nazi Germany! Because they dont see the similar. Because they dont see the consequences. A normal human cannot become a superman, but if…

IDM弹窗解决 - -一叶知秋

IDM弹窗解决1、打开任务管理器,结束IDM任务(一定要结束全部的IDM任务)2、在控制面板中,打开 管理工具(有搜索)3、然后打开 本地安全策略4、找到 软件限制策略->其它规则,如果 软件限制策略 下面没有选项,就…

PHP+MySQL开发语言 在线下单订水送水小脚本源码及搭建指南

PHP+MySQL开发语言 在线下单订水送水小脚本源码及搭建指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

Sliding Window Algorithm

核心目的 滑动窗口技术的主要目的是优化算法。它能将一个通常需要用两层嵌套循环(时间复杂度为 \(O(N^2)\))才能解决的问题,转化为只需一次单循环(时间复杂度为 \(O(N)\)),从而大大提高代码的执行效率。工作原理…

微信企业号可以做微网站吗宿州建设银行网站

对数值进行调整在Python中对整数和浮点数进行数字计算是很容易的。但是,如果你需要对分数,数组或者日期和时间进行计算,这就会稍微复杂点。对于简单的取整操作,我们可以使用内建的round(value, ndigits)函数就可,举个例…

网站建设所需人员上海如何优化网站

动态通过网络获取json来tabbar图片和文字或其他信息转载于:https://www.cnblogs.com/TheYouth/p/6488843.html

合肥的网站建设剂屏购物网站开发流程

文章目录 5 智能指针与内存管理5.1 RAII与引用计数5.2 std::shared_ptr5.3 std::unique_ptr5.4 std::weak_ptr 6 正则表达式7 并行与并发7.1 并行基础7.2 互斥量与临界区7.3 期物7.4 条件变量7.5 原子操作与内存模型 5 智能指针与内存管理 5.1 RAII与引用计数 在传统 C 中&am…

广西柳州网站建设公司网站建设的实验总结

文章目录 生成数据帧参考 生成数据帧 代码如下,代码很简单,有几点要注意, 较高版本的MATLAB中支持0x的写法使用bitand进行位运算使用strcat函数进行字符串拼接时,如果需要插入空格,要使用双引号 cmd_ay(1) 0x33; …

图片 展示 网站模板快速seo整站优化排行

本博客参考官方文档进行介绍,全网仅此一家进行中文翻译,走过路过不要错过。 官方网址:https://www.mpi-forum.org/ 参考文档:https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf 引用官方4.1文档方法: manu…

国庆模拟赛总结

2025/10/2 T1 这道题我一眼出思路呀,直接建反边然后判断一下可达性不就秒了吗,10分钟直接秒,不过有点坑,第一个点如果没出边那它就应该标记合法,这不标直接100pts->90pts,以后还是要多注意细节。还有一点很重…

深入解析:video-audio-extractor:视频转换为音频

深入解析:video-audio-extractor:视频转换为音频pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

10.8 CSP-JS 模拟赛 T4. discover

思路 不难想到用数量较少的危险点来限制长方形, 进而处理正方形 现在的问题就是如何精确地刻画任意一个本质相同的长方形, 发现我们完全可以通过枚举四个危险点来刻画一个长方形 但是这样会出现大量的不合法情况\((\)即…

20251008 模拟测 总结

\(\mathcal{Preface}\) 分数 \(50+100+40+100=290\),甚至比去年低 \(15\) 分,有点受不了了。 A 题代码上挂了 \(50\) 分,C 题思维上挂了 \(60\) 分。 简称:挂了 \(50\) 分,还“挂了”\(60\) 分。 挂的最猛烈的一次…