python 中的 sort() 和 sorted()

47 阅读2分钟

arrays.sort()sorted(arrays) 是 Python 中用于对数组(列表)进行排序的两种常用方法,它们在功能上有相似之处,但也存在一些重要区别:

1. 返回值

  • arrays.sort()
    • 这是一个原地排序方法,它直接对原列表 arrays 进行排序,不返回任何值(返回 None)。
    • 例如:
      arrays = [3, 1, 2]
      arrays.sort()
      print(arrays)  # 输出:[1, 2, 3]
      print(arrays.sort())  # 输出:None
      
  • sorted(arrays)
    • 这是一个内置函数,它会返回一个新的排序后的列表,而原列表 arrays 不会被改变。
    • 例如:
      arrays = [3, 1, 2]
      sorted_arrays = sorted(arrays)
      print(arrays)  # 输出:[3, 1, 2],原列表不变
      print(sorted_arrays)  # 输出:[1, 2, 3]
      

2. 对原数据的影响

  • arrays.sort()
    • 会直接修改原列表 arrays,排序后原列表的内容被改变。
  • sorted(arrays)
    • 不会修改原列表,而是创建一个新的列表来存储排序后的结果。

3. 适用范围

  • arrays.sort()
    • 只能对可变序列(如列表 list)进行排序,不能用于不可变序列(如元组 tuple)。
  • sorted(arrays)
    • 可以对任何可迭代对象(如列表、元组、字典的键、集合等)进行排序,并返回一个列表。
    • 例如:
      arrays = (3, 1, 2)  # 元组
      sorted_arrays = sorted(arrays)
      print(sorted_arrays)  # 输出:[1, 2, 3]
      

4. 参数

  • arrays.sort()
    • 可以接受以下参数:
      • key:用于指定一个函数,该函数会被应用到每个元素上,用于生成排序的依据。
      • reverse:布尔值,如果为 True,则按降序排序;默认为 False(升序)。
  • sorted(arrays)
    • 除了接受 arrays 作为输入外,还可以接受以下参数:
      • key:同上。
      • reverse:同上。
      • cmp(Python 2 中有,Python 3 中被移除):用于指定一个比较函数。

5. 性能

  • arrays.sort()
    • 通常比 sorted(arrays) 更高效,因为它直接在原列表上操作,不需要额外的内存来存储新的排序结果。
  • sorted(arrays)
    • 需要额外的内存来存储排序后的结果,因此在处理非常大的数据时可能会稍慢一些。

6. 稳定性

  • arrays.sort()
    • 是稳定的排序算法(Timsort),即当两个元素相等时,它们的相对顺序不会改变。
  • sorted(arrays)
    • 同样是稳定的排序算法。

总结

  • 如果你希望直接修改原列表并节省内存,使用 arrays.sort()
  • 如果你需要保留原列表不变,并且可能需要对不可变序列进行排序,使用 sorted(arrays)