在这篇文章中,我们将介绍 如何在 Python 中将嵌套列表展平。 为了将嵌套列表转换为扁平列表,让我们来看一些示例。
示例:
输入 : l = [1, 2, [3, 4, [5, 6] ], 7, 8, [9, [10] ] ]
输出 : l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
输入 : l = [[[‘item1‘, ‘item2‘]], [[‘item3‘, ‘item4‘]]]
输出 : l = [‘item1‘, ‘item2‘, ‘itm3, ‘item4‘‘]
什么是嵌套列表?
嵌套列表是包含在另一个列表中的列表(或者是包含在另一个嵌套列表中的列表)。我们的任务是在 Python 中将这种嵌套列表转换为单一列表,即无论 Python 列表中有多少层嵌套,都要去除所有的嵌套结构,将其转换为一个包含最外层括号内所有值的单一列表,且内部不再包含任何括号。
在这篇文章中,我们将介绍 5 种不同的方法来将列表的列表展平。
- 使用嵌套循环
- 使用列表推导式
- 使用递归
- 使用 NumPy 模块
- 使用 Python 内置的 sum() 方法
示例 1:使用嵌套 for 循环将嵌套列表转换为扁平列表
在这个示例中,我们将看到首先遍历外部列表,如果存在子列表,我们就使用 for 循环 遍历该子列表。之后,我们将元素追加到我们的新列表 "flatList" 中,这就得到了一个一维的扁平列表。
Python3
CODEBLOCK_96934e0e
输出:
List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]
时间复杂度:O(n)
辅助空间:O(n)
示例 2:使用列表推导式
在这个示例中,我们将使用 列表推导式 首先遍历列表,然后使用 for 循环遍历子列表。之后,我们使用列表推导式将元素追加到我们的新列表 "flatList" 中,从而得到一个一维的扁平列表。
Python3
CODEBLOCK_13ebb088
输出:
List [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
Flat List [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]
示例 3:使用递归
在这个示例中,我们使用 递归方法 来展平具有多层嵌套的列表。
Python3
CODEBLOCK_1d9ad4de
输出:
The original list: [1, 2, [3, 4, [5, 6]], 7, 8, [9, [10]]]
The list after removing nesting: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
示例 4:使用 Pandas 模块
在这个示例中,我们使用 pandas 模块,pandas 有一个名为 np.concatenate 的方法,它可以帮助我们将嵌套列表展平。
Python3
CODEBLOCK_f2c2dd5f
输出:
[11, 33, 22, 55, 11, 77, 88]
示例 5:使用 Python 内置的 sum() 方法
在这个示例中,我们使用 Python 内置的 sum() 方法 来获取扁平列表。
Python3
CODEBLOCK_eaf4828a
输出:
New list [11, 22, 33, 44, 55, 66, 77, 88, 99]
示例 6:使用 Python functools 模块
functools 模块 提供了使用和扩展其他函数及可调用对象的方法,而无需完全重写它们。
Python3
`
import functools
import operator
# 原始列表
lis = [[11, 22, 33, 44], [55, 66, 77], [88, 99, 100]]
flatList = functools.reduce(operator.iconcat, lis, [])