Python3 中 sorted 与 sort 区别
绪论
在 Python3 中,sorted()
和 sort()
是两个常用的函数,用于对序列(如列表或元组)进行排序。虽然它们的名称相似,但它们在功能和实现上有着显著的差异。本文将深入探讨 sorted()
和 sort()
之间的区别,以帮助开发者理解何时以及如何使用这两种函数。
sorted()
函数
sorted()
是一个内置函数,用于创建序列的新副本,副本中的元素按升序排列。该函数接受一个序列作为输入,并返回一个按升序排序后的新列表。
python
my_list = [5, 1, 3, 2, 4]
sorted_list = sorted(my_list)
print(sorted_list) # 输出:[1, 2, 3, 4, 5]
sorted()
函数的一个主要优势是它不会修改原始序列。因此,如果需要在保留原始序列不变的情况下排序,可以使用 sorted()
。此外,sorted()
还可以接受一个可选的 key
参数,该参数指定用于比较元素的函数。这使得 sorted()
能够根据自定义标准对序列进行排序。
python
my_list = [('Apple', 5), ('Banana', 3), ('Orange', 1)]
sorted_list = sorted(my_list, key=lambda x: x[1])
print(sorted_list) # 输出:[('Orange', 1), ('Banana', 3), ('Apple', 5)]
sort()
方法
sort()
是一个列表方法,用于对列表就地排序。该方法直接修改原始列表,而不是返回新列表。和 sorted()
一样,sort()
也按照升序对元素进行排序。
python
my_list = [5, 1, 3, 2, 4]
my_list.sort()
print(my_list) # 输出:[1, 2, 3, 4, 5]
与 sorted()
相比,sort()
的主要优点是它对列表进行就地排序,节省了创建新列表的内存开销。但是,sort()
会修改原始列表,这在某些情况下可能不希望发生。此外,sort()
不接受 key
参数,这意味着它不能根据自定义标准进行排序。
区别总结
下表总结了 sorted()
和 sort()
之间的关键区别:
| 特性 | sorted()
| sort()
|
|—|—|—|
| 返回值 | 新列表(副本) | 就地修改列表 |
| 原始序列 | 不修改 | 修改 |
| key
参数 | 支持 | 不支持 |
| 内存开销 | 创建新列表 | 就地修改 |
选择使用场景
根据以上区别,sorted()
和 sort()
在不同的情况下有不同的合适使用场景:
- 如果需要对序列进行排序并返回排序后的副本,同时保留原始序列,则应使用
sorted()
。 - 如果需要对列表进行就地排序,并且不需要返回排序后的副本,则应使用
sort()
。 - 如果需要根据自定义标准对序列进行排序,则应使用
sorted()
并指定key
参数。
性能考虑
sorted()
和 sort()
的性能特征略有不同。对于较小的序列,sorted()
和 sort()
在性能上相对接近。但是,对于较大序列,sort()
的就地排序机制可以提供更好的性能,因为避免了创建新列表的开销。
问答
问:sorted()
和 sort()
中哪个效率更高?
答:对于较小序列,二者效率相当。对于较大序列,sort()
更高效。
问:sorted()
可以对字典排序吗?
答:不可以。sorted()
只对序列排序,字典不是序列。
问:如何对列表中的对象按其属性排序?
答:使用 sorted()
并指定一个 key
函数来提取要排序的属性。
问:如何对列表中的元素进行降序排序?
答:使用 sorted()
并指定 reverse=True
参数,或使用 sort()
并指定 reverse=True
参数。
问:sorted()
和 sort()
哪一个可以并行执行?
答:Python3.8 及更高版本中,sort()
可并行执行。sorted()
不支持并行执行。
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_31034.html