Python中sorted()和sort()的区别
在Python中,sorted()
和sort()
是两个用于对序列(如列表或元组)进行排序的函数。虽然它们都实现了排序功能,但它们的用法、性能和返回结果方面存在一些关键差异。
用法
sorted()
是一个内置函数,它生成一个排序后的新序列,而不会修改原序列。它接受一个可迭代对象作为参数,并返回一个按升序或降序排列的新列表。
“`python
mylist = [5, 2, 1, 4, 3]
sortedlist = sorted(mylist) # [1, 2, 3, 4, 5]
print(sortedlist)
print(my_list) # [5, 2, 1, 4, 3]
“`
sort()
方法是对象的方法,它直接对原序列进行排序。它不需要参数,且返回None
。
python
my_list.sort() # [1, 2, 3, 4, 5]
print(my_list) # [1, 2, 3, 4, 5]
性能
对于小序列,sorted()
和sort()
的性能差异可以忽略不计。但是,随着序列长度的增加,sorted()
通常比sort()
更有效率。这是因为sorted()
在创建新序列时利用了Timsort算法,而sort()
使用的是插入排序或归并排序算法。Timsort算法对于长序列的排序效率较高。
返回结果
sorted()
返回一个已排序的新序列,而sort()
直接对原序列进行排序,不返回任何值。
“`python
sortedlist = sorted(mylist) # 新序列
sortedlistdesc = sorted(my_list, reverse=True) # 新序列降序
mylist.sort() # 原序列排序,不返回值
mylist.sort(reverse=True) # 原序列降序排序,不返回值
“`
自定义比较函数
sorted()
和sort()
都可以使用key
参数指定自定义比较函数。此函数用于确定序列中元素的排序顺序。
“`python
def mycustomsort(element):
return element[1] # 根据元素的第二个元素进行排序
mylist = [(‘John’, 25), (‘Alice’, 30), (‘Bob’, 18)]
sortedlist = sorted(mylist, key=mycustom_sort) # 按年龄升序排列
“`
总结
下表总结了sorted()
和sort()
之间的主要区别:
| 特征 | sorted()
| sort()
|
|—|—|—|
| 返回结果 | 新排序的序列 | 修改原序列 |
| 效率 | 对于长序列更有效率 | 对于小序列更有效率 |
| 自定义排序 | 支持自定义比较函数 | 支持自定义比较函数 |
| 修改原序列 | 不修改 | 修改 |
常见问答
1. 什么情况下应该使用sorted()
?
当需要按特定顺序创建一个新序列时,应使用sorted()
。
2. 什么情况下应该使用sort()
?
当直接对原序列进行排序,并且不需要创建新序列时,应使用sort()
。
3. Timsort
算法和插入/归并排序算法有什么区别?Timsort
算法结合了插入排序和归并排序算法的优点,对于长序列的排序效率更高。
4. 如何按降序对序列进行排序?
可以使用reverse=True
参数进行降序排序。
5. 如何使用自定义比较函数对序列进行排序?
可以使用key
参数指定自定义比较函数,用于确定序列中元素的排序顺序。
原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_29392.html