使用多个属性对 Python 列表进行排序2024 年 8 月 29 日 | 阅读 6 分钟 Python 列表的排序方式有很多种。有各种各样的算法可以用来排序列表。排序一维 Python 列表非常直接。它只需要直接应用其中一种可用算法。然而,给定一个嵌套的 Python 列表,我们将根据什么来排序这个列表?让我们来看看如何解决这个问题。 引言排序算法通常用于解决与数据结构相关的问题。它们可以应用于任何数据结构。我们可以使用内置的 Python 函数来排序任何 Python 列表。内置的 sort() 函数会就地排序列表,而另一个函数 sorted() 则返回一个已排序的列表。然而,如果我们只使用该函数并将列表作为其参数传递,我们只能根据一个属性进行排序。因此,如果我们希望根据多个属性对嵌套的 Python 列表进行排序,我们必须寻找其他方法。 使用多个属性对 Python 列表进行排序的方法使用多个属性排序列表有几个好处。此操作相当于根据第一列对属性进行分组,对其进行排序,然后单独对每一列的属性进行排序。假设我们有一个嵌套的 Python 列表,需要对其进行排序。如果我们根据嵌套列表的第一个元素进行排序,并且有两个元素相同,那么这两个列表的顺序将是不确定的。然后我们必须查找第二个元素、第三个元素,依此类推。 排序列表的方法
方法 1如前所述,可以使用内置的 sorted() 函数对 Python 列表进行排序。然而,该函数的默认行为是根据单个属性对列表进行排序。我们可以向列表添加一个额外的参数,以便使用此函数根据多个属性对列表进行排序。这个参数称为“key”。函数的语法如下: 语法 首先,我们将定义一个嵌套的 Python 列表。 下一步是使用 sorted() 函数对嵌套列表进行排序。在该函数中,我们将列表作为参数之一。第二个参数是 key。key 是一个用于排序列表的函数。我们将以语法所示的方式给出 lambda 函数。first_column_index 是决定排序顺序的主列。然后将根据 second_column_index 对每个组进行排序。我们可以根据需要提供任意数量的列。 该函数将返回排序后的列表。最后一步是打印排序后的列表。 让我们看一个例子来理解函数的工作原理。我们将创建一个包含整数和字符串的嵌套 Python 列表。我们将根据多列属性对列表进行排序。 代码 输出 [[2, 'Andrew', 'Actor', 30], [4, 'Harry', 'Singer', 29], [1, 'Harry', 'Singer', 32], [3, 'Tom', 'Actor', 28], [5, 'Tom', 'Director', 30]] 正如我们所见,“Tom”在第一列中对于两行是相同的。根据函数,如果两行或多行的第一列值相同,那么这些行将根据第二列进行排序。因此,“Actor”排在“Director”之前。现在,索引为 0 和 3 的行的第二列索引值相同。因此,这些行将根据第三列索引进行排序。 时间复杂度:该函数的时间复杂度为 O(log n)。但是,我们对整个列表进行了多次排序;因此,对嵌套列表进行排序的时间复杂度为 O(n * log n)。 空间复杂度:我们将排序后的列表存储在另一个变量中;因此,空间复杂度为 O(n) 方法 - 2在此方法中,我们将使用 itemgetter 函数。我们将再次将该函数与 sorted 函数一起使用。此函数允许我们使用尽可能多的属性来排序列表。该函数的工作方式类似于 lambda 函数;这次,我们需要给函数一个指向该项的指针。 让我们看一下 itemgetter 的语法 要使用 itemgetter 函数,我们需要导入 operator 库。导入库后,下一步是创建一个嵌套列表。我们将根据 3 列对这个嵌套列表进行排序。我们将使用 sorted 函数来提供列表名称,并再次使用 key 参数。对于此参数,我们将提供 itemgetter 函数以及列索引,就像 lambda 函数一样。最后,我们将打印排序后的列表。 我们将使用第一个示例中使用的相同的嵌套列表。我们将根据第一、第二和第三列索引对列表进行排序。正如我们所见,“Tom”在第一列中对于两行是相同的。根据函数,如果两行或多行的第一列值相同,那么这些行将根据第二列进行排序。因此,“Actor”排在“Director”之前。现在,索引为 0 和 3 的行的第二列索引值相同。因此,这些行将根据第三列索引进行排序。 代码 输出 [[2, 'Andrew', 'Actor', 30], [4, 'Harry', 'Singer', 29], [1, 'Harry', 'Singer', 32], [3, 'Tom', 'Actor', 28], [5, 'Tom', 'Director', 30]] 时间复杂度:排序函数必须多次对列表进行排序。对列表进行一次排序的时间复杂度为 O(log n)。但是,对列表进行 n 次排序将使时间复杂度为 O(n log n),其中 n 是列表元素的数量。 空间复杂度:我们使用了空间来存储排序后的列表。由于原始列表占用的空间为 O(n),因此排序后的列表也将占用 O(n) 的空间。 方法 - 3在此方法中,我们使用 attrgetter() 函数根据多个属性对列表进行排序。我们必须导入 operator 模块才能使用 attrgetter() 方法。此外,我们不能将列索引传递给此方法;因此,我们首先需要为嵌套列表的列命名。 代码 输出 [[2, 'Andrew', 'Actor', 30], [4, 'Harry', 'Singer', 29], [1, 'Harry', 'Singer', 32], [3, 'Tom', 'Actor', 28], [5, 'Tom', 'Director', 30]] |
1. Python 金融投资基础 [Udemy] 通过这个 Python 金融 Udemy 课程开启您的职业生涯。您将成为使用 Python 语言进行金融分析的专家。这是一门有趣的课程,可以理解 Python 如何用于处理金融计算和股票投资组合...
阅读 8 分钟
?Python 中的实用函数是一个小型、独立的执行特定任务的代码片段。它被称为“实用程序”,因为它是一个有用的工具,使特定任务更容易执行。这些函数并非独立存在,而是为了...
阅读 2 分钟
调频 (FM) 是一种调制技术,用于通过改变载波信号的频率来传输信息。在 FM 中,载波信号的频率由信息信号(通常是音频信号)调制。这会创建一个频率与...
14 分钟阅读
引言 人工智能领域取得了巨大的进步,导致了各种算法的开发来处理复杂的任务。其中一个算法是 LightGBM,它是 Light Gradient Boosting Machine 的缩写。LightGBM 因其效率、速度和处理大规模数据集的能力而广受欢迎。
阅读 6 分钟
接下来是一个抽象的理论语法,用于定义 DOT 语言的特性。终结符以醒目的文本样式显示,非终结符以斜体显示。确切的字符用单引号给出。括号(和)在需要时表示分组。方括号 [ 和 ] 包含...
阅读 6 分钟
在下面的教程中,我们将创建一个 Python 程序来估计买卖股票的最佳时间。那么,让我们开始吧。理解 Python 项目假设我们有一个数组 X,其中 X[i] 表示给定股票在第 n 天的价格。我们需要...
阅读 4 分钟
散点图是一种数据可视化方法,用于显示两个数值变量之间的关系。在 Python 中,有一个名为 DataFrame 的类,可以使用 pandas 绘制散点图,此类的成员称为 plot。通过使用...
阅读 6 分钟
二项式分布是概率论和统计学中的一个关键概念。它解释了在一定数量的独立伯努利试验中获得特定成功次数的可能性,其中每个试验只能导致成功或失败。以下是二项式分布的主要特征:固定...
阅读 3 分钟
在 Python 中,`容器` 是一个包含其他对象的对象。容器提供了一种组织和管理数据集合的方法。Python 提供了几种内置容器类型,包括 `列表`、`元组`、`集合` 和 `字典`。每种类型都有其自身的特点和用例。列表 列表是有序集合...
阅读 2 分钟
在当前的技术环境中,许多公司都被大数据所吸引。然而,过去大数据利用存储在 Hadoop 技术中的数据,并且不得不处理延迟问题。一个全新的系统可以用于处理大量...
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India