📅  最后修改于: 2023-12-03 15:25:55.466000             🧑  作者: Mango
Python中有不同的方法可以对列表进行排序,其中包括内置的函数和方法以及标准库中的模块。
Python内置了两个排序函数,分别为sorted()
和list.sort()
。这两个函数都可以对一个列表进行排序,但是它们的实现方式是不同的。
sorted()
函数会返回一个新的已排序的列表,原列表的顺序不会受到影响。sorted()
函数可以接收一个关键字参数key
,用于指定排序的规则。
>>> my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> sorted_list = sorted(my_list)
>>> print(sorted_list)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
>>> my_list = ['apple', 'banana', 'cherry', 'date']
>>> sorted_list = sorted(my_list, key=len)
>>> print(sorted_list)
['date', 'apple', 'banana', 'cherry']
list.sort()
方法会修改原列表,返回值为None
。list.sort()
方法同样可以接收一个关键字参数key
。
>>> my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> my_list.sort()
>>> print(my_list)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
>>> my_list = ['apple', 'banana', 'cherry', 'date']
>>> my_list.sort(key=len)
>>> print(my_list)
['date', 'apple', 'banana', 'cherry']
Python还提供了一个sorted()
函数和list.sort()
方法都不支持的模块——sorted()
模块,它提供了更多定制排序功能。
operator
模块提供了多个函数,可用于比较列表中的两个元素。
>>> from operator import lt, gt
>>> lt(1, 2)
True
>>> gt(1, 2)
False
functools
模块提供了一个装饰器cmp_to_key()
,来将一个比较函数转换为一个key函数。
>>> from functools import cmp_to_key
>>> my_list = ['apple', 'banana', 'cherry', 'date']
>>> sorted_list = sorted(my_list, key=cmp_to_key(lambda x, y: len(x) - len(y)))
>>> print(sorted_list)
['date', 'apple', 'banana', 'cherry']
heapq
模块提供了一些用于堆排序的函数。
>>> import heapq
>>> my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
>>> sorted_list = list(heapq.merge([3, 1, 4], [1, 5, 9], [2, 6, 5, 3, 5]))
>>> print(sorted_list)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
Python中提供了多种排序方式,包括内置的函数和方法,以及标准库中的模块。不同的排序函数和方法提供了不同的方式来控制排序的规则,并且有时也需要根据不同的需求来选择相应的排序方式。