Python排序指南:list.sort()与sorted()的使用

需积分: 5 0 下载量 165 浏览量 更新于2024-08-26 收藏 187KB PDF 举报
"howto-sorting.pdf" 这篇文档是关于如何在Python中进行排序的指南,由Guido van Rossum和Python开发团队编写。文档涵盖了多种排序技术和策略,适用于不同场景和数据类型。 1. 基本排序 Python提供了两种基本的排序方式:内置的`list.sort()`方法和`sorted()`函数。`sorted()`函数可以对任何可迭代对象创建一个新的已排序列表,而`list.sort()`方法则直接在原地对列表进行排序,不返回结果。在效率上,如果不需要保留原始列表,`list.sort()`更为高效,因为它不会创建新的列表。`list.sort()`仅适用于列表,而`sorted()`可应用于所有可迭代对象。 示例: ```python # 使用sorted()函数 sorted_list = sorted([5, 2, 3, 1, 4]) # 返回[1, 2, 3, 4, 5] # 使用list.sort()方法 a = [5, 2, 3, 1, 4] a.sort() # a现在变为[1, 2, 3, 4, 5] ``` 2. 关键函数 `list.sort()`和`sorted()`都支持`key`参数,可以指定一个函数来处理每个列表元素,生成用于比较的键。这在处理复杂数据类型时特别有用,例如,对字符串进行不区分大小写的排序: ```python # 不区分大小写的字符串排序 words = "ThisisateststringfromAndrew".split() sorted_words = sorted(words, key=str.lower) # ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This'] ``` 3. Operator模块函数 Python的`operator`模块提供了一系列函数,如`itemgetter`, `attrgetter`等,用于获取对象的特定属性或元素,常用于`key`参数中,以基于特定字段对复杂对象排序。 4. 升序和降序 默认情况下,排序是升序(从小到大)。若要进行降序排序,可以使用`reverse=True`参数: ```python # 降序排序 sorted_numbers = sorted([5, 2, 3, 1, 4], reverse=True) # 返回[5, 4, 3, 2, 1] ``` 5. 排序稳定性和排序复杂度 Python的`list.sort()`和`sorted()`都是稳定的排序算法,意味着相等的元素的相对顺序在排序后保持不变。它们的时间复杂度通常是O(n log n),在最坏的情况下仍保持高效。 6. 使用装饰-排序-去装饰的旧方法 这是一种处理复杂对象排序的旧方法,先使用`lambda`或其他函数创建临时表示,再进行排序,最后去掉装饰。 7. 使用cmp参数的旧方法 在Python 2.x中,`list.sort()`和`sorted()`接受`cmp`参数,用户可以自定义比较函数。但在Python 3.x中,这个参数已被移除,取而代之的是使用`key`参数。 8. 其它 文档还可能包括更多高级排序技术,如自定义排序类、多级排序等。 这个指南对于任何需要在Python中处理排序问题的开发者都非常有价值,无论你是新手还是经验丰富的程序员,都能从中受益。