Python 中展平列表2025年03月17日 | 阅读 9 分钟 简介在 Python 编程语言中,列表被认为是最灵活的数据结构之一。另一方面,二维列表,或称为列表的列表,是一个列表对象,其中每个元素本身就是一个列表。例如:[[19, 18, 17], [16, 15, 14], [13, 12, 11]]。 展平列表的列表是一个将二维列表转换为一维列表的过程,通过解嵌套列表中的每个元素,即将 [[9, 8, 7], [6, 5, 4], [3, 2, 1]] 转换为 [9, 8, 7, 6, 5, 4, 3, 2, 1]。 我们可以通过嵌套的 for 循环、递归、列表推导式、核心函数或导入 Python 的库或包来执行展平过程,具体取决于嵌套列表的深度和规律性。 在本教程中,我们将使用 Python 编程语言来处理展平嵌套列表的各种方法。但在我们开始之前,让我们先了解嵌套列表的类型。 嵌套列表的类型有哪些?我们知道,Python 是一种弱类型编程语言。因此,我们可能会遇到两种类型的列表的列表。这些列表的列表或嵌套列表如下:
规则列表的列表 规则列表的列表中的每个项都被称为子列表,从而观察到元素类型的统一性。例如:[[9, 8, 7], [6, 5, 4], [3, 2, 1]] 是一个规则列表的列表,因为 [9, 8, 7], [6, 5, 4], [3, 2, 1] 都是列表类型。 不规则列表的列表 不规则列表的列表中的每个项要么被称为子列表,要么被称为非列表元素(例如,字符串或整数)。因此,元素类型存在不规则性。例如:[[9, 8, 7], [6, 5], 4, 3] 是一个不规则列表的列表,因为 [9, 8, 7] 和 [6, 5] 是列表类型,而 4 和 3 是 int 类型。 使用嵌套 for 循环展平列表的列表通过嵌套 for 循环展平列表的列表被认为是获得扁平列表的一种暴力方法。我们可以通过选择二维列表中的每个项并将其排列在一维列表中来执行此方法。 让我们看一个适用于规则和不规则列表的例子。 示例 输出 Genuine List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] Converted Flat List: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 说明 在上面的示例中,我们定义了一个名为 flattenlist 的函数,它接受一个参数 _2dlist。然后我们使用 for 循环来迭代嵌套列表的元素,并将它们追加以生成一个扁平列表。然后我们定义了嵌套列表并实现了 flattenlist 函数。结果,嵌套列表已成功转换为扁平列表。 使用列表推导式展平嵌套列表使用列表推导式展平列表的列表被认为是获得扁平列表的一种优雅方法,具体取决于现有的二维列表。然而,这种方法提供的解决方案不太直观。 让我们看一个例子。 示例 输出 Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 说明 在上面的示例中,我们定义了一个嵌套列表和列表推导式。然后我们为用户打印它们。结果,嵌套列表已成功转换为扁平列表。 使用递归方法展平列表的列表我们还可以使用递归方法来展平二维列表。让我们看一个实现递归方法以展平列表的列表的示例。此实现适用于规则和不规则列表的列表。 示例 输出 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 说明 在上面的示例中,我们定义了一个函数并使用了一个 if 语句,声明如果嵌套列表的长度等于零,则返回嵌套列表。 如果零索引上的数据元素是列表的实例,则列表索引再次进入函数,并添加到列表的下一个索引,依此类推。否则,函数将返回元素,依此类推。最后,我们定义了嵌套列表并执行了函数。结果,列表的列表已递归展平。 利用 Python 库我们还可以利用 Python 编程语言的一些库来展平列表的列表。这些库的实现如下: 使用 functools 和 operator 库展平列表的列表 operator 库提供了 iconcat() 函数来执行连接等基本操作。我们可以将此函数累积地应用于嵌套列表的数据元素,从左到右,从而将嵌套列表减小为扁平列表。 让我们看一个例子来理解其实现。 示例 输出 Given List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110] 说明 在上面的示例中,我们导入了 functools 库和 operator 库。然后我们定义了一个空列表作为 regularlist。然后我们定义了一个名为 convo 的函数来将列表的列表转换为扁平列表。在此函数中,我们使用了 for 循环,其中元素从嵌套列表中附加到我们之前定义的空列表中。稍后我们定义了嵌套列表并执行了函数。结果,列表的列表已成功转换为扁平列表。 使用 itertools 库展平列表的列表 itertools 库提供了 chain() 函数,它允许我们将嵌套列表转换为一个理想的扁平列表。该函数通过按顺序迭代作为参数传递的可迭代对象来将连续的系列视为一个单独的系列。 让我们看一个例子 示例 输出 The nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] The flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 说明 在上面的示例中,我们导入了 itertools 库并生成了一个嵌套列表。然后我们使用了 chain() 函数将给定的嵌套列表转换为扁平列表。最后,我们将结果返回给用户。结果,列表的列表已成功展平。 使用 NumPy 库展平列表的列表 NumPy 库提供了各种日常操作,包括按列或按行连接二维规则数组。我们将使用一个名为 flat 的属性来获得一个展平数组的一维迭代器,以达到目标。让我们看一个例子来理解 concatenate 函数和 flat 属性的用法。 示例 输出 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 说明 在上面的示例中,我们导入了 numpy 库并定义了一个嵌套列表。然后我们使用了 numpy 库的 concatenate 函数及其 flat 属性来展平嵌套列表的元素,并将它们连接到一个新的扁平列表中。最后,我们为用户打印了结果。因此,列表的列表已成功展平。 利用核心函数我们还可以利用 Python 编程语言提供的一些核心函数来执行展平任务。 使用 sum 函数展平列表的列表 我们可以将内部列表的求和视为问题的另一种解决方案。我们将两个参数传递给 sum 函数:第一个参数是 iterable,即嵌套列表;第二个参数是 start,在这种情况下是一个空列表,它充当初始的扁平列表,内部子列表的数据元素将被添加进去。 我们可以说这种方法非常方便,因为我们不必导入任何东西。但是,当嵌套列表中存在大量子列表时,它比 itertools() 和 chain() 函数慢。 让我们看一个例子 示例 输出 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 说明 在上面的示例中,我们定义了嵌套列表。然后我们使用了 sum() 函数将嵌套列表展平成一维列表,并为用户打印了结果列表。结果,我们成功地将列表的列表转换为扁平列表。 使用 Lambda 关键字展平列表的列表 我们可以使用 lambda 关键字定义一个匿名函数。我们可以将规则/不规则列表作为参数传递给此匿名函数。表达式被求值以获得一个扁平的一维列表。 让我们看一个例子 示例 输出 The Nested list: [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] The Flattened List: [10, 20, 30, 30, 50, 60, 40, 60, 70, 70] 说明 在上面的示例中,我们定义了一个嵌套列表。然后我们使用了 lambda 关键字以及定义列表推导式表达式的参数。然后我们为用户打印了它们。结果,我们成功地将二维不规则列表转换为了扁平列表。 下一个主题Python 中的 Pair Plot |
1. Python 金融投资基础 [Udemy] 通过这个 Python 金融 Udemy 课程开启您的职业生涯。您将成为使用 Python 语言进行金融分析的专家。这是一门有趣的课程,可以理解 Python 如何用于处理金融计算和股票投资组合...
阅读 8 分钟
SFTP,是 SSH 文件传输协议的缩写,也称为安全文件传输协议,是一种网络协议,允许我们通过任何可靠的数据流访问文件、传输文件和管理文件。该程序在安全通道上工作,例如 SSH,它...
7 分钟阅读
这款游戏会很有趣。让我们开始在 Python 中构建这个 Mad Libs 生成器项目,并学习一些有趣的创意。Mad Libs 生成器简介 这是一款流行的儿童游戏。用户会得到一个故事,并被要求输入一个单词,但不知道这个单词...
阅读 8 分钟
在本教程中,我们将开发 Python 脚本来查找已安装的 Windows 应用程序并将它们连接到 GUI 应用程序。Winapps 模块用于管理 Windows 中已安装的程序。在终端中运行以下命令将帮助您在系统中安装该模块:pip...
阅读 6 分钟
在执行某些任务时,我们必须出于多种原因使用图表,例如折线图、条形图等,例如使任务更具交互性,以非常有趣的方式传递信息,图表易于理解且不言自明等。这就是为什么绘制图表或...
阅读 8 分钟
Python取证与虚拟化 | 哈希函数 在本教程中,我们将学习使用Python的取证科学、基本的Python取证应用程序、哈希函数、破解加密、可视化、命名约定、Dshell和Scapy、网络取证及其详细解释。简介 收集和保存证据对于网络安全至关重要。
14 分钟阅读
一种称为“Trie”的基于树的信息结构被描述为用于存储字符串集合并对其进行快速搜索。名称“Trie”来源于动词“Recovery”,表示查找或获取某物的行为。两个字符串将具有相同的...
阅读 19 分钟
我们知道像 Python 这样的编程语言是一种解释型语言,这本质上意味着每个代码块或代码行都一个接一个地处理,而不是将整个程序一次性更改为低级代码。每当 Python 解释器扫描一行代码时……
7 分钟阅读
在本教程中,我们将学习如何使用 Python 读取 HTML 表。我们知道,每天都会产生大量数据,我们需要提取相关信息。互联网是获取相关数据以满足我们需求的绝佳来源,并且...
5 分钟阅读
介绍在 Python 中,del 关键字通常用于删除对象。由于 Python 中的所有内容都表示某种对象,因此 del 关键字也可以用于删除列表、变量、列表的一部分等。del 语句不返回任何类型...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India