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

Python中的sorted()函数是用于对可迭代对象进行排序的内置函数。它使用 timsort 作为其排序算法,该算法源自归并排序和插入排序。sorted()函数语法如下所示:
sorted(iterable, key=None, 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()中添加key函数的使用,它将充当排序的键。有两种使用键函数的方法:
让我们用单词创建一些示例列表:
['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!
如果喜欢今天分享的文章,别忘了给我们点赞支持一下!
yinyoudamo: https://blog.csdn.net/yinyoudamo/article/details/119116107
[2]罗西汉: https://www.ycpai.cn/python/t9XU3iLG.html

推荐阅读
点击 阅读原文 了解更多