python的sort和sorted区别

Python 中的 sort() 和 sorted():理解它们的异同

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

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2024-06-26 04:34
下一篇 2024-06-26 04:40

相关推荐

公众号