Python列表排序:深入探讨sort()和sorted()

您所在的位置:网站首页 python列表降序升序 Python列表排序:深入探讨sort()和sorted()

Python列表排序:深入探讨sort()和sorted()

2024-07-17 09:02| 来源: 网络整理| 查看: 265

34d17c2d5ee7f42c93d8cd37f00603af.jpeg

更多Python学习内容:ipengtao.com

大家好,我是彭涛,今天为大家分享 Python列表排序:深入探讨sort()和sorted(),全文4700字,阅读大约15分钟。

在Python中,列表排序是一项常见而重要的任务。本文将深入研究列表排序的两种主要方法:sort() 方法和 sorted() 函数。通过详细的解释和丰富的示例代码,将全面探讨如何灵活、高效地利用这两种方式进行列表排序。

sort() 方法的基本用法

sort() 方法是列表对象的一个内置方法,能够直接对原始列表进行排序。

以下是一个基本的用法示例:

numbers = [4, 1, 7, 3, 9, 2] numbers.sort() print(numbers)  # 输出:[1, 2, 3, 4, 7, 9]

sort() 方法默认按升序排序,同时也支持降序排序:

numbers = [4, 1, 7, 3, 9, 2] numbers.sort(reverse=True) print(numbers)  # 输出:[9, 7, 4, 3, 2, 1] sort() 方法的高级用法 1 自定义排序关键字

sort() 方法还允许通过关键字参数 key 指定一个自定义的排序函数。

以下是一个按字符串长度排序的示例:

words = ["apple", "banana", "orange", "kiwi"] words.sort(key=len) print(words)  # 输出:['kiwi', 'apple', 'banana', 'orange'] 2 使用lambda函数

通过 lambda 函数,可以更灵活地定义排序规则。例如,按单词的最后一个字母进行排序:

words = ["apple", "banana", "orange", "kiwi"] words.sort(key=lambda x: x[-1]) print(words)  # 输出:['banana', 'kiwi', 'apple', 'orange'] sorted() 函数的基本用法

与 sort() 方法不同,sorted() 函数不会修改原始列表,而是返回一个新的已排序列表。

以下是 sorted() 函数的基本用法:

numbers = [4, 1, 7, 3, 9, 2] sorted_numbers = sorted(numbers) print(sorted_numbers)  # 输出:[1, 2, 3, 4, 7, 9] print(numbers)         # 输出:[4, 1, 7, 3, 9, 2](原列表未改变) sorted() 函数的高级用法 1 反向排序

与 sort() 方法类似,sorted() 函数也支持 reverse 参数,用于进行降序排序:

numbers = [4, 1, 7, 3, 9, 2] sorted_numbers_desc = sorted(numbers, reverse=True) print(sorted_numbers_desc)  # 输出:[9, 7, 4, 3, 2, 1] 2 自定义排序函数

利用 key 参数,可以实现与 sort() 方法相似的自定义排序:

words = ["apple", "banana", "orange", "kiwi"] sorted_words = sorted(words, key=len) print(sorted_words)  # 输出:['kiwi', 'apple', 'banana', 'orange'] 3 使用 operator 模块

operator 模块提供了一些方便的函数,可用于更复杂的排序操作。

例如,按元组的第二个元素进行排序:

import operator data = [(1, 5), (3, 2), (7, 8), (4, 1)] sorted_data = sorted(data, key=operator.itemgetter(1)) print(sorted_data)  # 输出:[(4, 1), (3, 2), (1, 5), (7, 8)] 性能比较和选择

性能比较在选择使用 sort() 方法还是 sorted() 函数时至关重要。理解它们的性能特征有助于在不同场景中做出明智的选择。

sort() 方法的性能:

sort() 方法是一个原地排序方法,直接修改原始列表,因此在内存使用方面更为高效。它采用Timsort算法,结合了归并排序和插入排序的优点,对于大型数据集,sort() 方法通常表现得更出色。这是因为它避免了创建新的数据结构,直接在原有列表上进行排序操作,节省了额外的内存开销。

numbers = [4, 1, 7, 3, 9, 2] numbers.sort() sorted() 函数的性能:

sorted() 函数创建一个新的已排序列表,不修改原始列表,因此在某些情况下更安全。但是,由于它需要额外的内存来存储新的列表,对于大型数据集可能会引起内存开销较大的问题。特别是当原始数据集很大时,sorted() 可能不如 sort() 方法效率高。

numbers = [4, 1, 7, 3, 9, 2] sorted_numbers = sorted(numbers) 如何选择:

数据集大小: 对于大型数据集,尤其是内存有限的情况下,推荐使用 sort() 方法以降低内存压力。

原始数据保留: 如果需要保留原始数据的顺序,或者避免直接修改原始数据,可以选择使用 sorted() 函数。

性能需求: 如果性能是首要考虑因素,且没有保留原始数据的需求,那么 sort() 方法通常是更好的选择。

稳定性: 由于 sort() 方法是原地排序,它在某些情况下可能不够稳定。如果稳定性对任务至关重要,可以考虑使用 sorted() 函数。

在实际应用中,根据任务需求综合考虑这些因素,选择适合的排序方式,以便在保证性能的同时满足其他需求。

探索稳定性和复杂对象排序 1 稳定性

在排序时,稳定性是一个重要的概念。稳定排序意味着如果有两个元素相等,排序后它们的相对顺序不会改变。Python的 sorted() 函数是稳定的,而 sort() 方法通常也是稳定的。

data = [(1, 2), (3, 2), (1, 1), (3, 1)] sorted_data = sorted(data, key=lambda x: x[0]) print(sorted_data)  # 输出:[(1, 2), (1, 1), (3, 2), (3, 1)](维持相对顺序) 2 对象排序

当处理复杂对象时,可以通过定义对象的 __lt__(小于)、__le__(小于等于)等特殊方法,使对象具有可比性,从而能够进行排序。

class Person:     def __init__(self, name, age):         self.name = name         self.age = age     def __lt__(self, other):         return self.age 


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3