“`html
Python 列表的 sort 和 sorted 区别
Python 提供了两种对列表进行排序的方法:sort() 和 sorted()。虽然这两个方法都用于对列表中的元素进行排序,但它们在以下几个方面有所不同:
1. 原地修改与返回新列表
sort() 方法对原有的列表进行原地修改,而 sorted() 方法返回一个新的已排序列表,而不修改原有的列表。
例如:
“`python
mylist = [3, 1, 4, 6, 2]
mylist.sort() #原地修改
print(my_list) # 输出:[1, 2, 3, 4, 6]
sortedlist = sorted(mylist) # 返回新列表
print(sortedlist) # 输出:[1, 2, 3, 4, 6]
print(mylist) # 输出:[3, 1, 4, 6, 2] # 原列表未修改
“`
2. 时间复杂度
sort() 方法的时间复杂度为 O(n log n),其中 n 为列表的长度。这是因为 sort() 方法使用了归并排序算法,该算法具有较高的时间复杂度。
sorted() 方法的时间复杂度为 O(n log n),但它还包括创建新列表的时间,因此其总体时间复杂度通常比 sort() 方法稍慢。
3. 稳定性
稳定性是指当两个元素相等时,它们在排序后的列表中的相对顺序保持不变。sort() 方法是不稳定的,这意味着相等元素的顺序在排序后可能发生改变。
sorted() 方法是稳定的,这意味着相等元素在排序后的列表中保持原始顺序。
例如:
“`python
mylist = [(1, ‘A’), (1, ‘B’), (2, ‘C’)]
mylist.sort() # 不稳定,相等元素的顺序发生了改变
print(my_list) # 输出:[(1, ‘A’), (2, ‘C’), (1, ‘B’)]
sortedlist = sorted(mylist) # 稳定,相等元素的顺序保持不变
print(sorted_list) # 输出:[(1, ‘A’), (1, ‘B’), (2, ‘C’)]
“`
4. 关键字参数
sorted() 方法提供了一些额外的关键字参数,可以自定义排序行为。这些参数包括:
- key: 用于指定排序时使用的键函数。
- reverse: 用于指定是否按降序排序。
何时使用 sort() 和 sorted()
在以下情况下使用 sort() 方法:
- 当需要原地修改列表时。
- 当性能是关键因素时(例如,对大型列表进行排序)。
- 当稳定性不是必需时。
在以下情况下使用 sorted() 方法:
- 当需要创建新列表时。
- 当稳定性是必需时。
- 当需要自定义排序行为时(例如,使用 key 参数)。
问答
- sort() 和 sorted() 的主要区别是什么?
- sort() 和 sorted() 的时间复杂度分别为多少?
- sorted() 是稳定的还是不稳定的?
- 给出使用 sorted() 方法按降序对列表进行排序的示例代码。
- 什么时候应该使用 sort() 而不是 sorted()?
结论
sort() 和 sorted() 都是 Python 中对列表进行排序的有效方法。通过理解它们的差异,你可以根据自己的特定需求选择最合适的排序方法。
“`
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_11437.html