简介
Python中的sorted()
函数是一个内建函数,用于创建输入序列的一个已排序副本。它对序列中的元素进行排序,并返回一个新的排序列表,而不会修改原始列表。
语法
python
sorted(iterable, key=None, reverse=False)
其中:
iterable
:要排序的序列,可以是列表、元组、集合等。key
(可选):一个函数,用于提取元素中的比较键。它将被用于对元素进行排序。reverse
(可选):一个布尔值,表示是否按降序排序。默认值为False
(升序)。
工作原理
sorted()
函数通过使用Timsort算法对输入序列进行排序。Timsort是一种混合排序算法,它结合了归并排序和插入排序的优点。
Timsort将序列划分为较小的子列表,并分别对它们进行排序。然后,它合并这些子列表,产生一个完全排序的列表。
如果提供了key
函数,则sorted()
函数将根据比较键对元素进行排序。比较键是通过应用key
函数于每个元素而获得的。
返回值
sorted()
函数返回一个新的已排序列表。原始序列不会被修改。
用例
sorted()
函数在许多场景中都有用,包括:
- 对列表、元组或集合等序列进行排序。
- 根据特定比较键对元素进行排序。
- 按升序或降序对元素进行排序。
示例
“`python
mylist = [5, 2, 1, 4, 3]
sortedlist = sorted(mylist)
print(sortedlist) # 输出:[1, 2, 3, 4, 5]
mydictlist = [
{‘name’: ‘John’, ‘age’: 25},
{‘name’: ‘Alice’, ‘age’: 30},
{‘name’: ‘Bob’, ‘age’: 28}
]
sorteddictlist = sorted(mydictlist, key=lambda x: x[‘age’])
print(sorteddictlist) # 输出:[{‘name’: ‘John’, ‘age’: 25}, {‘name’: ‘Bob’, ‘age’: 28}, {‘name’: ‘Alice’, ‘age’: 30}]
“`
常见问题解答
1. 为什么sorted()
函数会创建新列表而不修改原始列表?
这是因为Python中的序列是不可变的。这意味着它们不能被直接修改。sorted()
函数必须返回一个新列表,因为原始列表不能被直接修改为排序列表。
2. 如何对元素按降序排序?
通过将reverse
参数设置为True
,可以对元素按降序排序。
python
sorted_list = sorted(my_list, reverse=True)
3. 如何使用key
函数对元素进行排序?
提供一个key
函数,该函数提取每个元素的比较键。然后,sorted()
函数将根据这些比较键对元素进行排序。
python
sorted_dict_list = sorted(my_dict_list, key=lambda x: x['age'])
4. sorted()
函数的时间复杂度是多少?
sorted()
函数的时间复杂度为O(n log n),其中n是输入序列的长度。
5. 有哪些替代sorted()
函数的排序方法?
替代sorted()
函数的排序方法包括:
- 使用
list.sort()
方法直接对列表进行排序。 - 使用
heapq
模块中的heapsort()
函数进行堆排序。 - 使用
quickselect
模块中的kthsmallest()
和kthlargest()
函数进行快速选择排序。
原创文章,作者:高信纾,如若转载,请注明出处:https://www.wanglitou.cn/article_52918.html