sorted 与 sort 区别 Python
简介
sort()
和sorted()
是Python中两个强大的内置函数,用于对序列进行排序。虽然这两个函数有类似的目的,但它们在实现和行为上存在一些关键差异。
sort() 函数
作用: 在原序列上进行原地排序
语法:
python
list.sort([key, reverse])
参数:
key
(可选):用于比较元素的函数reverse
(可选):指定是否按降序排序,默认为 False
行为:
sort()
在原序列上进行原地排序,不会生成新的序列。- 排序后,序列被修改。
- 如果不提供
key
函数,则对元素进行比较,以确定它们的排序顺序。 - 可以使用
reverse
参数将序列按降序排序。
sorted() 函数
作用: 生成一个新的已排序序列
语法:
python
sorted(iterable, key, reverse)
参数:
iterable
:要排序的序列key
(可选):用于比较元素的函数reverse
(可选):指定是否按降序排序,默认为 False
行为:
sorted()
生成一个新的已排序序列,而不修改原序列。- 排序后的序列是新的对象,与原序列无关。
- 如果不提供
key
函数,则对元素进行比较,以确定它们的排序顺序。 - 可以使用
reverse
参数将序列按降序排序。
差异摘要
| 特征 | sort() | sorted() |
|—|—|—|
| 原序列修改 | 是 | 否 |
| 返回值 | 无 | 新的已排序序列 |
| 原地排序 | 是 | 否 |
| 不可变序列 | 可用 | 不可用 |
何时使用 sort()?
以下情况适合使用 sort()
:
- 希望对可变序列进行原地排序。
- 排序不需要复杂或自定义的比较逻辑。
- 性能是优先考虑的,因为
sort()
比sorted()
更快。
何时使用 sorted()?
以下情况适合使用 sorted()
:
- 希望生成一个新的已排序序列,而不修改原序列。
- 需要复杂的或自定义的比较逻辑。
- 序列是不可变的,无法使用
sort()
。
例子
使用 sort() 对列表进行原地排序:
python
my_list = [3, 1, 2, 4]
my_list.sort()
print(my_list) # 输出:[1, 2, 3, 4]
使用 sorted() 生成一个已排序的元组:
python
my_tuple = (3, 1, 2, 4)
sorted_tuple = sorted(my_tuple)
print(sorted_tuple) # 输出:(1, 2, 3, 4)
使用 key 参数进行自定义排序:
“`python
def my_key(x):
return x[1]
mylist = [(2, 1), (1, 2), (3, 3)]
sortedlist = sorted(mylist, key=mykey)
print(sorted_list) # 输出:[(1, 2), (2, 1), (3, 3)]
“`
常见问答
Q1:在性能方面,sort() 和 sorted() 有什么差异?
A1:sort()
比 sorted()
更快,因为 sorted()
生成一个新序列,而 sort()
在原序列上进行原地排序。
Q2:我什么时候应该使用 sort(),什么时候应该使用 sorted()?
A2:使用 sort()
进行原地排序,使用 sorted()
生成一个新的已排序序列。
Q3:我可以在排序时同时使用 key 和 reverse 参数吗?
A3:是的,你可以同时使用 key
和 reverse
参数来指定自定义排序和排序顺序。
Q4:sorted() 可以用于对字典排序吗?
A4:是的,你可以使用 sorted(dict, key=lambda x: x[0])
对字典进行按键排序,或使用 sorted(dict, key=lambda x: x[1])
对字典进行按值排序。
Q5:sort() 和 sorted() 可以用于对嵌套序列排序吗?
A5:是的,你可以使用 sorted(seq, key=lambda x: x[0])
对嵌套序列进行按第一项排序,或使用更高级的键函数进行更复杂的排序。
原创文章,作者:杨文宁,如若转载,请注明出处:https://www.wanglitou.cn/article_63105.html