使用说明
- 在 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'](按字符串长度排序)
主要区别:
-
返回值:
sort()
:对原始列表进行原地排序,没有返回值。sorted()
:返回一个新的排序后的列表,原始列表不变。
-
用途:
sort()
:当你希望修改原始列表并且不需要保留原始顺序时使用。sorted()
:当你需要保留原始列表不变并得到一个新的排序列表时使用。
选择使用:
- 如果你需要对列表进行排序,并且不再需要原始的顺序,使用
sort()
方法。 - 如果你需要保留原始列表并且希望得到一个新的已排序列表,使用
sorted()
函数。
实现原理
- Python 的
sorted()
函数和list.sort()
方法都使用 Timsort 算法来实现排序。Timsort 是一种高效的混合排序算法,它结合了归并排序和插入排序的优点,专为实际应用中的排序任务优化。以下是有关 Timsort 详细信息:
Timsort 算法
-
基本思想:
- Timsort 是一种基于归并排序和插入排序的混合算法。它首先将数据分成小块(称为“运行”),然后对这些运行进行排序。接着,它将这些排序好的运行合并成一个有序的大块。
-
优势:
- 稳定性:Timsort 是稳定的排序算法,保证相等元素的相对顺序不会改变。
- 性能:在大多数实际数据集上表现优秀,特别是当数据已经部分有序时。