python里sort和sorted区别

Python 中的 sort 和 sorted 的区别

python里sort和sorted区别

简介

sort()sorted() 是 Python 中用于对序列(列表、元组等)进行排序的两个函数。虽然它们都具有对序列进行排序的功能,但它们在用法、返回值和时间复杂度上存在一些关键区别。

用法

sort()

sort() 是一个原位排序函数,这意味着它直接对序列进行排序,而不会创建新的副本。它的语法如下:

python
序列.sort(key=None, reverse=False)

其中:

  • key: 一个可选的函数,用于指定排序的依据。
  • reverse: 一个布尔值,指示是否按降序排序。

sorted()

sorted() 是一个返回排序后副本的函数,不会修改原始序列。它的语法如下:

python
sorted(序列, key=None, reverse=False)

除了 keyreverse 参数外,sorted() 还支持额外的参数,例如:

  • cmp: 一个可选的比较函数,可用于自定义排序行为。
  • stable: 一个布尔值,指示是否维护排序前的元素顺序。

返回值

sort()

sort() 不返回任何值。它直接对原序列进行排序,并且不创建新副本。

sorted()

sorted() 返回一个新的排序后的序列副本。原始序列保持不变。

时间复杂度

sort()

  • 最佳情况:O(n)
  • 平均情况:O(n log n)
  • 最差情况:O(n log n)

sorted()

  • 最佳情况:O(n)
  • 平均情况:O(n log n)
  • 最差情况:O(n log n)

需要注意的是,sorted() 的时间复杂度与 sort() 相同,因为它是通过调用 sort() 来实现的。

适用场景

sort()

  • 当需要直接对序列进行排序且不关心原始序列的值时。
  • 当需要对大的序列进行原地排序时。
  • 当需要使用自定义排序函数或按降序排序时。

sorted()

  • 当需要对序列进行排序并获得一个新的排序后副本时。
  • 当需要使用额外的排序参数,例如 stablecmp 时。
  • 当需要在不可变序列上进行排序时,例如元组。

示例

“`python

使用 sort() 对列表进行原地排序

mylist = [5, 2, 1, 3, 4]
my
list.sort()
print(my_list) # 输出:[1, 2, 3, 4, 5]

使用 sorted() 创建排序后的副本

sortedlist = sorted(mylist, reverse=True)
print(sorted_list) # 输出:[5, 4, 3, 2, 1]
“`

常见问题解答

Q1:sort()sorted() 哪个更快?

A1:对于大的序列,sort() 往往更快,因为它直接对序列进行操作,而 sorted() 需要创建新副本。

Q2:sorted() 是否可以对不可变序列进行排序?

A2:是的,sorted() 可以对不可变序列,例如元组,进行排序。

Q3:如何使用自定义排序函数?

A3:可以使用 key 参数指定一个自定义的排序函数。该函数应接受一个元素作为参数,并返回要用于排序的键。

Q4:stable 参数有什么作用?

A4:stable 参数指示是否在排序期间保持元素的相对顺序。如果为 True,则相等元素将按其原始顺序出现。

Q5:如何按降序排序?

A5:可以通过将 reverse 参数设置为 True 来按降序排序序列。

原创文章,作者:郑玮雅,如若转载,请注明出处:https://www.wanglitou.cn/article_50652.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2024-05-31 09:23
下一篇 2024-05-31 09:26

相关推荐

公众号