当前位置:首页>python>你真的了解Python中的排序吗?

你真的了解Python中的排序吗?

  • 2026-10-11 08:06:21
你真的了解Python中的排序吗?
关注+星标,每天学习Python新技能

来源:网络

人生苦短,快学Python!

在Python内置函数之中有一个叫做sorted()的函数,它可以对可迭代对象进行排序。大家可能会用过这个函数,那么,你真的了解它吗?

基本排序

Python中的sorted()函数是用于对可迭代对象进行排序的内置函数。它使用 timsort 作为其排序算法,该算法源自归并排序和插入排序。sorted()函数语法如下所示:

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

参数说明:

  • iterable – 可迭代对象。可以是列表,可以是元祖、集合等类型。
  • key --主要是用来对需要比较的元素进行处理,只有一个参数,可以是一个函数,也可以是一个类。具体的函数的参数或者类的初始化参数就是取自于可迭代对象中,通过key参数可以对可迭代对象中的元素进行处理,用处理后的值进行排序。
  • reverse-- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回值:

返回重新排序的列表。[1](注意:原有的列表顺序不变,返回一个的新排序后的列表)

对数字列表进行升序排序

最简单的示例是按升序对数字列表进行排序:

nums = [3, 1, 9, 7, 5]s_nums = sorted(nums)print(s_nums)

输出结果:

对数字列表进行降序排序

与前面的示例类似,我们将对数字列表进行排序,但现在按降序排列:

nums = [3, 1, 9, 7, 5]s_nums = sorted(nums, reverse=True)print(s_nums)

输出结果:

对字符串列表进行排序

Python中sorted()函数根据每个字符串的第一个字符对字符串进行排序:

fruit = ['banana', 'pineapple', 'orange', 'apple']s_fruit = sorted(fruit)print(s_fruit)

输出结果:

注意:具体的排序方式从数据类型来看就是数字、英文、中文、符号这样的顺序,而且符号和中文的排序大小则是按照ASCII码表和Unicode编码字符集的大小来决定的。

英文的话则没有大小之分,都是按照二十六个字母的顺序来排序的[2],数字的话就是正数大于复数,也是按照从0-9的顺序排序。

在 sorted() 中使用键函数

对于更复杂的排序任务,我们可以在sorted()中添加key函数的使用,它将充当排序的键。有两种使用键函数的方法:

  • 使用 lambda 函数作为键函数
  • 使用自定义函数作为关键函数

与lambda函数一起使用

让我们用单词创建一些示例列表:

['Python', 'programming', 'tutorial', 'code']

现在,在这个例子中,我们想根据元素的长度对列表进行排序,这意味着单词将根据字符数从最短到最长排序。

可以想象,我们将不得不使用len()函数来计算每个元素的长度,并使用lambda函数,我们可以将其用作排序的关键函数:

words = ['Python', 'programming', 'tutorial', 'code']s_words = sorted(words, key=lambda x: len(x))print(s_words)

输出结果:

使用自定义函数

让我们重用上一个示例中的相同单词列表,我们想根据列表中每个元素的长度执行相同的排序,但使用自定义函数来计算每个单词的长度。

我们可以定义一个简单的函数来计算单词的长度,并将其作为键函数传递给sorted() :

words = ['Python', 'programming', 'tutorial', 'code']defcalc_len(word):    len_w = len(word)return len_ws_words = sorted(words, key=calc_len)print(s_words)

输出结果:

这与我们使用带有 lambda 函数的len()作为sorted()的键函数时的结果相同。

对自定义对象进行排序

Python中的sorted()函数的功能可以扩展到自定义对象(只要我们正在对可迭代对象进行排序)。

例如,让我们创建一个具有两个属性name和age的自定义类Person:

classPerson:def__init__(self, name, age):        self.name = name        self.age = agedef__repr__(self):return repr((self.name, self.age))

此类将创建一个包含每个人信息的元组列表:

#创建元组列表persons = [    Person('Mike', 20),    Person('John', 35),    Person('David', 23),]print(persons)

输出结果:

如上所示,这是一个元组列表,它是一个 Python 可迭代对象,可以使用sorted()函数进行排序。

在这个例子中,我们想根据每个人的年龄属性对列表进行排序:

s_persons = sorted(persons, key=lambda person: person.age)print(s_persons)

输出结果:

这样,我们就详细复习了sorted()的函数的基本功能,大家实际使用时也可以与其他可迭代数据结构一起用于更复杂的用例。

人生苦短,快学Python!

如果喜欢今天分享的文章,别忘了给我们点赞支持一下!

参考资料

[1]

yinyoudamo: https://blog.csdn.net/yinyoudamo/article/details/119116107

[2]

罗西汉: https://www.ycpai.cn/python/t9XU3iLG.html

长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

推荐阅读

8个【提升数据处理效率】的Python神库!

分享一个Python字符匹配魔法库!

太狠了,Python实现个人手机定位分析!

一个超好用的Python库:itertools

点击 阅读原文 了解更多

最新文章

随机文章