Python 中的 sort() 和 sorted():理解它们的异同
概述
在 Python 中,sort()
和 sorted()
都是内置函数,用于对序列(列表、元组或字符串)进行排序。虽然这两个函数都有相似的目的,但它们在实现方式、性能和返回结果方面存在一些关键差异。
sort() 函数
sort()
是一个原位排序函数,这意味着它直接对原序列进行修改,而不会产生新的对象。它使用快速排序算法,这是一种高效的排序算法,平均复杂度为 O(n log n)。
语法:
python
list.sort(key=None, reverse=False)
参数:
key
: 可选参数,指定用于排序的键函数。reverse
: 布尔值,指示按降序还是升序排序(默认升序)。
返回值:
无返回值。
sorted() 函数
另一方面,sorted()
是一个非原位排序函数,它返回一个新的、已排序的序列,而不会修改原序列。它使用归并排序算法,这是一种稳定的排序算法,这意味着相等元素将保持其原始顺序。
语法:
python
sorted(iterable, key=None, reverse=False)
参数:
iterable
: 要排序的可迭代对象(列表、元组、字符串等)。key
: 可选参数,指定用于排序的键函数。reverse
: 布尔值,指示按降序还是升序排序(默认升序)。
返回值:
一个已排序的新列表。
差异总结
| 特性 | sort() | sorted() |
|—|—|—|
| 实现 | 原位 | 非原位 |
| 算法 | 快速排序 | 归并排序 |
| 复杂度 | O(n log n) 平均 | O(n log n) 最坏 |
| 返回值 | 无 | 新列表 |
| 稳定性 | 不稳定 | 稳定 |
用法指南
选择使用 sort()
还是 sorted()
取决于特定的用例和需求:
- 原位排序:使用
sort()
进行原位排序,当需要直接对原始序列进行修改时。 - 非原位排序:使用
sorted()
进行非原位排序,当需要返回一个新排序的序列时,而不需要修改原序列。 - 稳定性:如果需要保持相等元素的顺序,请使用
sorted()
。 - 性能:对于大型序列,
sort()
通常比sorted()
更快,因为它直接修改原序列。
示例
原位排序(使用 sort())
python
my_list = [5, 2, 7, 1, 3]
my_list.sort()
print(my_list) # 输出:[1, 2, 3, 5, 7]
非原位排序(使用 sorted())
python
my_list = [5, 2, 7, 1, 3]
new_list = sorted(my_list, reverse=True)
print(my_list) # 输出:[5, 2, 7, 1, 3](原序列保持不变)
print(new_list) # 输出:[7, 5, 3, 2, 1](新排序的序列)
常见问题解答
1. sort()
和 sorted()
是否可以互换使用?
通常情况下,它们不能互换使用。sort()
用于原位排序,而 sorted()
用于非原位排序。
2. 哪种函数更快?
对于大型序列,sort()
通常比 sorted()
更快,因为它直接修改原序列。
3. sort()
是否稳定?
不稳定。这意味着相等元素在排序后可能不会保持其原始顺序。
4. sorted()
如何处理相等元素?
它保持相等元素的原始顺序。
5. 我如何使用 key
函数进行自定义排序?
key
参数允许您指定一个函数,该函数用于提取用于排序的特定键值。例如:
python
my_list = [{'name': 'John', 'age': 30}, {'name': 'Mary', 'age': 25}]
my_list.sort(key=lambda x: x['age'])
原创文章,作者:杨文宁,如若转载,请注明出处:https://www.wanglitou.cn/article_88572.html