0

0

Python代码怎样进行数据排序 Python代码实现多种排序算法的方法

絕刀狂花

絕刀狂花

发布时间:2025-11-17 23:34:02

|

923人浏览过

|

来源于php中文网

原创

Python内置排序效率高且适用广泛,采用Timsort算法,结合归并和插入排序优点,平均和最坏时间复杂度均为O(n log n),稳定且高效;list.sort()用于原地排序节省内存,sorted()适用于需保留原数据或处理不可变对象的场景,两者均支持reverse和key参数实现灵活排序。

python代码怎样进行数据排序 python代码实现多种排序算法的方法

Python里处理数据排序这事儿,说复杂也复杂,说简单也真简单。最直接的办法就是用它自带的那些“魔法”函数,比如列表的sort()方法或者全局的sorted()函数,它们效率高得惊人,几乎能满足日常所有需求。但要是你好奇它们背后是怎么跑的,或者想在特定场景下玩点花样,那自己动手写写冒泡、选择、插入这些经典排序算法,也挺有意思的,还能加深理解。

Python里数据排序,最常用的就是两个利器:一个是列表自带的sort()方法,另一个是全局的sorted()函数。

list.sort()是原地排序,直接修改你原来的列表,不返回新列表。如果你需要保持原列表不变,那就得用sorted(),它会给你一个全新的、排好序的列表。

my_list = [3, 1, 4, 1, 5, 9, 2, 6]
my_list.sort() # my_list 变为 [1, 1, 2, 3, 4, 5, 6, 9]
print(f"list.sort() 后的列表: {my_list}")

another_list = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_list = sorted(another_list) # sorted_list 是 [1, 1, 2, 3, 4, 5, 6, 9], another_list 保持不变
print(f"sorted() 后的新列表: {sorted_list}")
print(f"原列表保持不变: {another_list}")

这两个函数都非常灵活,可以传入reverse=True来降序排列,更强大的是key参数,它允许你定义一个函数来提取每个元素中用于比较的部分。比如,你想按字符串长度排序,或者按对象某个属性排序,key就派上大用场了。

立即学习Python免费学习笔记(深入)”;

words = ["apple", "banana", "cat", "dog"]
words.sort(key=len) # 按长度排序: ['cat', 'dog', 'apple', 'banana']
print(f"按长度排序: {words}")

students = [('Alice', 20, 85), ('Bob', 22, 90), ('Charlie', 20, 78)]
# 按年龄排序,年龄相同则按分数排序
students.sort(key=lambda s: (s[1], s[2]))
print(f"按年龄和分数排序: {students}")
# 结果: [('Charlie', 20, 78), ('Alice', 20, 85), ('Bob', 22, 90)]

你看,用好key参数,几乎能搞定所有复杂的排序需求。

MetaVoice
MetaVoice

AI实时变声工具

下载

那么问题来了,既然Python内置的排序这么强大,我们为什么还要学那些什么冒泡、选择、插入、快速、归并排序呢?我觉得这更多是一种“知其然,更知其所以然”的追求。在大多数实际开发中,你可能真的很少需要自己去手写一个快速排序,因为内置的C实现通常比你写的Python版本快得多。但理解这些算法的原理,能让你对数据结构和算法复杂度有更深的认识,这在解决一些非典型问题、或者优化特定性能瓶颈时,会给你提供完全不同的视角。比如说,面试的时候,或者当你真的需要在一个极其受限的环境下,对一个特定类型的数据进行某种“非标准”的排序,这时候你脑子里有这些算法的知识储备,就能更从容地选择或设计。

Python内置排序机制的效率与适用场景是什么?

Python内置的排序算法,不管是list.sort()还是sorted(),底层都用了一种叫做Timsort的混合排序算法。这名字听着有点意思,其实它结合了归并排序(Merge Sort)和插入排序(Insertion Sort)的优点。对于小规模数据或者部分有序的数据,插入排序表现出色;而对于大规模数据,归并排序的稳定性及O(n log n)的平均时间复杂度就显得非常高效。Timsort巧妙地在这两者之间切换,所以它的性能在实际应用中非常优秀,几乎是“万金油”般的存在。

从效率上看,Timsort的平均和最坏时间复杂度都是O(n log n),这在比较排序算法中算是非常顶尖的了。而且它还是一个稳定排序算法,这意味着如果两个元素在排序前是相等的,那么排序后它们的相对顺序不会改变,这在处理复杂数据结构时非常有用,比如你按年龄排序,年龄相同的人,他们原来的录入顺序会保持不变。

那么什么时候用sort(),什么时候用sorted()呢?简单来说,如果你确定不需要保留原始列表,并且希望节省一点内存(因为sort()是原地修改),那就用list.sort()。如果你的业务逻辑要求原始数据不能被改变,或者你需要对非列表的可迭代对象(比如元组、集合、字典的键等)进行排序,那么sorted()就是你的不二之选,它总会返回一个新的列表。key参数的使用场景就更广泛了,只要你排序的依据不是元素

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

745

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

634

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

757

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1259

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

25

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号