1. 使用内置的 sorted() 函数Python的内置函数 sorted() 是进行排序操作的首选方法。它返回一个新的列表,按照指定的顺序排列元素。 示例:对数字列表进行排序 numbers s...
sorted() 函数Python的内置函数 sorted() 是进行排序操作的首选方法。它返回一个新的列表,按照指定的顺序排列元素。
# 示例:对数字列表进行排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]sorted() 不会修改原始列表,而是返回一个新的已排序的列表。reverse 参数来指定排序顺序(默认为升序)。sort() 方法列表的 sort() 方法可以直接在原列表上进行排序,不需要返回新的列表。
# 示例:对数字列表进行原地排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print(numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]sort() 方法会修改原始列表。sorted() 类似,可以通过 reverse 参数控制排序顺序。可以通过 key 参数传递一个函数来定义排序的依据。
# 示例:根据字符串长度对列表进行排序
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words) # 输出: ['date', 'apple', 'banana', 'cherry']key 函数应该返回用于比较的值。key 函数的定义。heapq 模块进行堆排序heapq 模块提供了一个函数 heapify 来构建一个堆,以及一个函数 heappop 来从堆中弹出最小元素。
import heapq
# 示例:使用堆排序算法
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
heapq.heapify(numbers)
sorted_numbers = [heapq.heappop(numbers) for _ in range(len(numbers))]
print(sorted_numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]heapq 适用于获取最大或最小元素的场景,而不是整个排序。maxheap=True 参数来构建最大堆。bisect 模块进行二分查找排序bisect 模块提供了对有序列表进行二分查找和插入的函数。
import bisect
# 示例:使用二分查找进行插入排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
for i, number in enumerate(numbers): bisect.insort(numbers, number)
print(numbers) # 输出: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]bisect.insort 可以将元素插入到正确的位置,以保持列表的有序性。通过以上五种方法,你可以根据不同的需求选择合适的排序方式。每种方法都有其适用场景和优势,理解它们的原理和特点对于编写高效、可维护的代码至关重要。