“`html
Python Sort 与 Sorted 区别
简介
Python 中的 sort()
和 sorted()
函数都是用于对列表或其他可迭代对象进行排序。然而,它们在实现方式和某些特性上存在一些区别。
sort() 函数
sort()
是一个内置函数,直接作用于可迭代对象本身。它会对对象进行原地排序,即更改对象的原始顺序。sort()
函数接受可选的参数,例如 key
和 reverse
,用于指定排序规则。
例如:python
my_list = [5, 3, 1, 2, 4]
my_list.sort()
print(my_list) # 输出: [1, 2, 3, 4, 5]
sorted() 函数
sorted()
是一个内置函数,返回一个新的已排序列表,而不会修改原始对象。它接受与 sort()
函数相同类型的参数。
例如:python
my_list = [5, 3, 1, 2, 4]
new_list = sorted(my_list)
print(new_list) # 输出: [1, 2, 3, 4, 5]
print(my_list) # 输出: [5, 3, 1, 2, 4] (原始列表保持不变)
区别
### 1. 原地排序与非原地排序
sort()
函数原地对可迭代对象进行排序,而 sorted()
函数返回一个新的已排序列表。
### 2. 复杂度
对于大小为 n 的列表,sort()
函数的平均时间复杂度为 O(n log n),最坏情况为 O(n^2)。sorted()
函数的平均时间复杂度始终为 O(n log n)。
### 3. 内存使用
sort()
函数不使用额外的内存,因为它原地排序。sorted()
函数创建一个新的列表,因此需要额外的内存。
### 4. 可变性
sort()
函数会更改原始可迭代对象的顺序,使其无法对不可变对象排序(例如元组)。sorted()
函数则不对原始对象进行修改,因此可用于对任何可迭代对象排序。
### 5. 返回值
sort()
函数不返回任何值,因为它直接修改了原始对象。sorted()
函数返回一个新的已排序列表。
最佳实践
- 对于原地排序,优先使用
sort()
函数。 - 对于非原地排序,或需要对不可变对象进行排序,使用
sorted()
函数。 -
考虑排序的时间和内存复杂度,根据需要选择适当的函数。
问答
1.
sort()
和sorted()
函数哪个时间复杂度更高?sorted()
函数始终为 O(n log n),而sort()
函数在最坏情况下为 O(n^2)。2.
sorted()
函数是否会修改原始对象?
否,sorted()
函数不会修改原始对象,它返回一个新的已排序列表。3. 使用
sort()
函数对元组排序是否可行?
不可以,sort()
函数无法对不可变对象排序,例如元组。4. 对于大列表,使用哪个函数更有效?
sorted()
函数对于大列表更有效,因为它始终具有 O(n log n) 的时间复杂度。5. 如何控制排序结果的顺序?
可以使用key
参数指定排序规则,例如:python
my_list = [('Item 1', 10), ('Item 2', 5), ('Item 3', 15)]
sorted(my_list, key=lambda x: x[1]) # 根据第二个元素排序
“`
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_9252.html