Python中列表和列表列表的展平指南
将一个2D数组转换为1D数组被称为扁平化。解决这个问题有很多方法。
我们将在本教程中探索其中一些方法。
让我们看一个例子。
输入
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. 循环
解决这个问题最常见的方法是使用循环。我想你们大多数人已经明白了。让我们看看使用循环解决问题的步骤。
- 用虚拟数据初始化列表并将其命名为数据。
- 现在,初始化一个名为flat_list的空列表。
- 迭代数据。
- 解包当前列表中的所有元素。
- 使用列表添加方法将它们添加到flat_list中。
- 打印结果。
查看以下问题的代码。
# 初始化数据和一个空列表
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []
# 迭代数据
for item in data:
# 将元素添加到flat_list中
flat_list += item
# 打印结果的flat_list
print(flat_list)
您可以使用另一个循环将子列表元素添加到flat_list 而不是使用连接运算符。我们还可以使用列表推导而不是循环。
两者都可以完成相同的工作。让我们看看解决问题的下一种方法。
#2. Itertools – Chain
我们将使用itertools
内置模块中的一个称为chain
的方法。
chain
方法遍历每个子列表并返回元素,直到其中没有子列表为止。它返回一个可迭代对象,我们需要将其转换为列表。
让我们看看解决问题的步骤。
- 用虚拟数据初始化列表并将其命名为数据。
- 使用
itertools.chain(*data)
获取扁平化的可迭代对象。 - 将结果可迭代对象转换为列表。
- 打印扁平化列表。
您可以在下面的代码段中查看代码。
# 导入模块
import itertools
# 初始化数据
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
# 扁平化列表并存储结果
flat_list = itertools.chain(*data)
# 将可迭代对象转换为列表并打印
print(list(flat_list))
#3. 扁平化多级列表
我们已经了解了如何扁平化一个列表。我们讨论过的上述方法无法处理多级列表。让我们看一个例子。
输入
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
输出
[1, 2, 3, 4, 5, 6, 7, 8, 9]
由于在程序之前我们不知道列表的深度,所以我们必须使用递归来解决这个问题。
- 根据示例将数据初始化为数据。
- 初始化一个名为flat_list的空列表。
- 编写一个名为flatten_list的函数。
- 遍历给定列表的元素。
- 如果元素是一个列表,则递归调用相同的函数。
- 如果元素不是一个列表,则将元素附加到flat_list。
- 使用数据调用该函数。
- 函数将把所有元素填充到flat_list 列表中。
- 打印flat_list以检查输出。
哇!写这么多代码的步骤。别担心。将上述语句转换为代码不会超过几分钟。
# 初始化数据和空列表
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []
# 函数
def flatten_list(data):
# 遍历数据
for element in data:
# 检查是否为列表
if type(element) == list:
# 使用当前元素作为新参数调用相同的函数
flatten_list(element)
else:
flat_list.append(element)
# 展开给定的列表
flatten_list(data)
# 打印flat_list
print(flat_list)
记住,我们没有转换现有的列表。相反,我们创建了一个新列表,其中包含给定列表的元素。
结论
希望您喜欢这篇文章。在Python中,可能还有很多其他方法可以展平列表,但我认为上面的方法可能是最简单的。
愉快编码 🙂