将多维数组转化为一维数组的方法
将多维数组转换为单维数组,这个过程通常被称为“展平”。 解决这个问题有很多种方法,本文将深入探讨几种常见的技巧。
以下是一个例子,展示了我们期望达成的效果:
输入:
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. 循环遍历
最基础且常用的方法是使用循环。 相信大部分读者对这种方法都有所了解。下面我们来详细了解一下使用循环解决问题的步骤:
- 首先,创建一个包含嵌套列表的虚拟数据,并将其命名为 “data”。
- 接着,初始化一个空列表,命名为 “flat_list”。
- 遍历 “data” 中的每一个子列表。
- 从当前的子列表中提取所有元素。
- 使用 “list append” 方法将这些元素添加到 “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 # 输出展平后的列表 print(flat_list)
除了使用连接运算符,你也可以用另一个循环将子列表的元素一个个添加到 “flat_list” 中。 此外,列表推导式也是一种可以替代循环的简洁方法。它们都能达到相同的效果。接下来,我们将介绍另一种解决问题的方法。
#2. 使用 itertools.chain
我们将使用 Python 内置模块 “itertools” 中的 “chain” 方法。
“chain” 方法会遍历每个子列表,并逐个返回其中的元素,直到所有子列表都被遍历完。 它返回一个可迭代对象,因此我们需要将其转换为列表。
以下是使用 “itertools.chain” 方法解决问题的步骤:
- 初始化一个包含嵌套列表的虚拟数据,并将其命名为 “data”。
- 使用 “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]
由于我们在程序运行之前无法得知列表的嵌套深度,因此我们需要使用递归来解决这个问题。
- 初始化一个包含多层嵌套列表的虚拟数据,并将其命名为 “data”。
- 初始化一个空列表,命名为 “flat_list”。
- 定义一个名为 “flatten_list” 的函数。
- 遍历传入列表中的每个元素。
- 如果元素是列表,则递归调用 “flatten_list” 函数,将该元素作为新的参数传入。
- 如果元素不是列表,则将其添加到 “flat_list” 中。
- 使用 “data” 调用 “flatten_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) # 输出展平后的列表 print(flat_list)
需要注意的是,我们没有直接修改原有的列表,而是使用原列表中的元素创建了一个新的列表。
总结
希望本教程对你有所帮助。 在 Python 中展平列表还有很多其他方法,但我认为以上几种方法是最简洁易懂的。
祝你编程愉快!🙂