sort和sorted函数的使用说明及原理

使用说明 

  • 在 Python 中,sort() 和 sorted() 函数都用于对列表进行排序,但它们有一些重要的区别和用法。下面详细介绍它们的使用方法和主要区别。

 sort() 方法

  • 功能:对列表进行原地排序(即修改原始列表)。
  • 返回值:没有返回值。它会直接修改调用该方法的列表。
  • 用法
    • 排序方式:默认按升序排序,可以使用 reverse=True 参数进行降序排序。
    • 排序依据:可以使用 key 参数提供一个函数,以指定排序的依据。

示例

# 示例 1: 默认升序排序

arr = [5, 3, 8, 1, 2]

arr.sort() print(arr)

# 输出: [1, 2, 3, 5, 8]

# 示例 2: 降序排序 arr = [5, 3, 8, 1, 2]

arr.sort(reverse=True) print(arr)

# 输出: [8, 5, 3, 2, 1]

# 示例 3: 使用 key 参数进行排序

arr = ["apple", "banana", "cherry"]

arr.sort(key=len) print(arr)

# 输出: ['apple', 'banana', 'cherry'](按字符串长度排序)

sorted() 函数

  • 功能:返回一个新的排序后的列表,不会修改原始列表。
  • 返回值:返回一个新的已排序列表。
  • 用法
    • 排序方式:默认按升序排序,可以使用 reverse=True 参数进行降序排序。
    • 排序依据:可以使用 key 参数提供一个函数,以指定排序的依据。

示例

# 示例 1: 默认升序排序

arr = [5, 3, 8, 1, 2]

sorted_arr = sorted(arr)

print(sorted_arr) # 输出: [1, 2, 3, 5, 8]

print(arr) # 输出: [5, 3, 8, 1, 2](原始列表未改变)

# 示例 2: 降序排序

arr = [5, 3, 8, 1, 2]

sorted_arr = sorted(arr, reverse=True)

print(sorted_arr) # 输出: [8, 5, 3, 2, 1]

# 示例 3: 使用 key 参数进行排序

arr = ["apple", "banana", "cherry"]

sorted_arr = sorted(arr, key=len)

print(sorted_arr) # 输出: ['apple', 'banana', 'cherry'](按字符串长度排序)

主要区别:

  1. 返回值

    • sort():对原始列表进行原地排序,没有返回值。
    • sorted():返回一个新的排序后的列表,原始列表不变。
  2. 用途

    • sort():当你希望修改原始列表并且不需要保留原始顺序时使用。
    • sorted():当你需要保留原始列表不变并得到一个新的排序列表时使用。

选择使用:

  • 如果你需要对列表进行排序,并且不再需要原始的顺序,使用 sort() 方法。
  • 如果你需要保留原始列表并且希望得到一个新的已排序列表,使用 sorted() 函数。

实现原理

  • Python 的 sorted() 函数和 list.sort() 方法都使用 Timsort 算法来实现排序。Timsort 是一种高效的混合排序算法,它结合了归并排序和插入排序的优点,专为实际应用中的排序任务优化。以下是有关 Timsort 详细信息:

Timsort 算法

  • 基本思想

    • Timsort 是一种基于归并排序和插入排序的混合算法。它首先将数据分成小块(称为“运行”),然后对这些运行进行排序。接着,它将这些排序好的运行合并成一个有序的大块。
  • 优势

    • 稳定性:Timsort 是稳定的排序算法,保证相等元素的相对顺序不会改变。
    • 性能:在大多数实际数据集上表现优秀,特别是当数据已经部分有序时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值