Python小白干货宝典:sorted()函数:列表元素排序

Python小白干货宝典:sorted()函数:列表元素排序
最新回答
辞慾

2026-10-22 09:40:42

定义:sorted() 函数对所有可迭代的对象进行排序操作。

内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)

返回值:返回重新排序的列表。

参数说明:cmp()函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1

语法:cmp( x, y )

参数:reverse()函数:用于反向列表中元素。

语法:list.reverse()

该方法没有返回值,但是会对列表的元素进行反向排序。

sorted 的使用方法:默认情况下,sorted 函数将按列表升序进行排序,并返回一个新列表对象,原列表保持不变,最简单的排序。

升序排序示例:>>> nums = [3,4,5,2,1]>>> sorted(nums)[1, 2, 3, 4, 5]

降序排序:如果要按照降序排列,只需指定参数 reverse=True 即可。

降序排序示例:>>> sorted(nums, reverse=True)[5, 4, 3, 2, 1]

自定义规则排序:如果要按照某个规则排序,则需指定参数key, key 是一个函数对象。

字符串长度排序示例:>>> chars = ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']>>> sorted(chars, key=len)['a', 'is', 'from', 'test', 'This', 'Andrew', 'string']

元组排序:对于复合的列表结构,例如由元组构成的列表,要按照元组中的某个元素排序,可以使用 lambda 定义一个匿名函数。

元组排序示例:>>> students = [('zhang', 'A'), ('li', 'D'), ('wang', 'C')]>>> sorted(students, key=lambda x: x[1])[('zhang', 'A'), ('wang', 'C'), ('li', 'D')]

自定义类排序:如果排序的元素是自定义类,例如按照年龄来排序,则可以写成。

排序示例:>>>a = [5,7,6,3,4,1,2]>>> b = sorted(a) # 保留原列表>>> a [5, 7, 6, 3, 4, 1, 2]>>> b[1, 2, 3, 4, 5, 6, 7] >>> L=[('b',2),('a',1),('c',3),('d',4)]>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数[('a', 1), ('b', 2), ('c', 3), ('d', 4)]>>> sorted(L, key=lambda x:x[1]) # 利用key[('a', 1), ('b', 2), ('c', 3), ('d', 4)] >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>> sorted(students, key=lambda s: s[2]) # 按年龄排序[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] >>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>>

排序多个字段:可以使用元组对多个字段进行排序。

排序示例:>>> sorted(student_objects, key=lambda t:(t.age, t.grade))[('dave', 'B', 10), ('lily', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]

自定义类排序:可以使用 operator 模块的 attrgetter 函数更高效地指定 key。

排序示例:>>> from operator import attrgetter>>> sorted(student_objects, key=attrgetter('age'))[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

排序不可比较元素:如果元素本身不可比较,则需要自定义比较规则。

排序示例:>>> nums = [2, 1.5, 2.5, '2', '2.5']>>> sorted(nums)TypeError: '<' not supported between instances of 'str' and 'int'

Python2与Python3的区别:在Python3中,字符串与数值不能比较。

排序函数区别:sorted() 函数适用于任意可迭代对象,而 sort() 通常用于列表。

排序结果返回:sorted() 函数返回排序后的列表,原有列表保持不变;sort() 函数直接修改原有列表,函数返回值为 None。