Python 中的 sort 和 sorted 的区别
简介
sort()
和 sorted()
是 Python 中用于对序列(列表、元组等)进行排序的两个函数。虽然它们都具有对序列进行排序的功能,但它们在用法、返回值和时间复杂度上存在一些关键区别。
用法
sort()
sort()
是一个原位排序函数,这意味着它直接对序列进行排序,而不会创建新的副本。它的语法如下:
python
序列.sort(key=None, reverse=False)
其中:
key
: 一个可选的函数,用于指定排序的依据。reverse
: 一个布尔值,指示是否按降序排序。
sorted()
sorted()
是一个返回排序后副本的函数,不会修改原始序列。它的语法如下:
python
sorted(序列, key=None, reverse=False)
除了 key
和 reverse
参数外,sorted()
还支持额外的参数,例如:
cmp
: 一个可选的比较函数,可用于自定义排序行为。stable
: 一个布尔值,指示是否维护排序前的元素顺序。
返回值
sort()
sort()
不返回任何值。它直接对原序列进行排序,并且不创建新副本。
sorted()
sorted()
返回一个新的排序后的序列副本。原始序列保持不变。
时间复杂度
sort()
- 最佳情况:O(n)
- 平均情况:O(n log n)
- 最差情况:O(n log n)
sorted()
- 最佳情况:O(n)
- 平均情况:O(n log n)
- 最差情况:O(n log n)
需要注意的是,sorted()
的时间复杂度与 sort()
相同,因为它是通过调用 sort()
来实现的。
适用场景
sort()
- 当需要直接对序列进行排序且不关心原始序列的值时。
- 当需要对大的序列进行原地排序时。
- 当需要使用自定义排序函数或按降序排序时。
sorted()
- 当需要对序列进行排序并获得一个新的排序后副本时。
- 当需要使用额外的排序参数,例如
stable
或cmp
时。 - 当需要在不可变序列上进行排序时,例如元组。
示例
“`python
使用 sort() 对列表进行原地排序
mylist = [5, 2, 1, 3, 4]
mylist.sort()
print(my_list) # 输出:[1, 2, 3, 4, 5]
使用 sorted() 创建排序后的副本
sortedlist = sorted(mylist, reverse=True)
print(sorted_list) # 输出:[5, 4, 3, 2, 1]
“`
常见问题解答
Q1:sort()
和 sorted()
哪个更快?
A1:对于大的序列,sort()
往往更快,因为它直接对序列进行操作,而 sorted()
需要创建新副本。
Q2:sorted()
是否可以对不可变序列进行排序?
A2:是的,sorted()
可以对不可变序列,例如元组,进行排序。
Q3:如何使用自定义排序函数?
A3:可以使用 key
参数指定一个自定义的排序函数。该函数应接受一个元素作为参数,并返回要用于排序的键。
Q4:stable
参数有什么作用?
A4:stable
参数指示是否在排序期间保持元素的相对顺序。如果为 True
,则相等元素将按其原始顺序出现。
Q5:如何按降序排序?
A5:可以通过将 reverse
参数设置为 True
来按降序排序序列。
原创文章,作者:郑玮雅,如若转载,请注明出处:https://www.wanglitou.cn/article_50652.html