【Python】将Python中的多维列表进行展开

1. 引言

在本教程中,我们将探索在 Python 中展平列表的不同方法。列表展开是指将多维列表转换为一维列表的过程,我们将介绍如何使用 Python 语法和 NumPy 库来分别展平 二维、三维和四维度的列表。

闲话少说,我们直接开始吧!

2. 展开二维列表

让我们首先创建一个名为flatten_2d的函数,该函数可以展平常见的二维数组。该函数采用list类型的列表作为输入并返回展开后的列表。代码实现如下:

def flatten_2d(input_list: list) -> list:
   flattened = []
   for sublist in input_list:
      for element in sublist:
        flattened.append(element)
   return flattened

该函数循环访问输入列表中的每个子列表,并将每个元素追加到展平列表中。最后,它返回展平列表。

为了测试函数,我们可以创建一个 2D 列表并将其传递给 flatten_2d 函数:

list_2d = [[1, 2], [3, 4], [5, 6]]
print(flatten_2d(list_2d))

运行代码,得到结果如下:

[1, 2, 3, 4, 5, 6]

3. 展开三维列表

接下来,让我们创建一个名为flatten_3d的函数,它可以展平三维数组。该函数遵循与flatten_2d函数类似的方法,但需要一个额外的循环来处理最外层的列表。

def flatten_3d(input_list: list) -> list:
  flattened = []
  for sublist in input_list:
    for sublist_2 in sublist:
      for element in sublist_2:
        flattened.append(element)
  return flattened

我们使用以下代码进行测试验证:

list_3d = [[[1, 2, 3, 4, 5, 6, 7, 8]]]
print(flatten_3d(list_3d))

得到输出如下:

[12345678]

4. 展开任意维度的列表

使用原版 Python 语法展平更多维度的列表可能会变得很麻烦,尤其是对于高维数组。此时,推荐大家使用 NumPy 库,它提供了一种简单的方法来平展任何维度的列表。

首先,确保通过在终端中运行 pip install numpy 来安装 NumPy库。接着,让我们创建一个名为 flatten_any 的函数,该函数使用 NumPy 来展平任何列表。相关函数定义如下:

import numpy as np

def flatten_any(input_list: list) -> list:
  np_list = np.array(input_list)
  flattened = np_list.flatten()
  return flattened.tolist()

上述函数使用 np.array() 将输入列表转换为 NumPy 数组。然后,它使用函数 flatten() 来展平数组。最后,它使用 tolist()函数将扁平化的NumPy数组转换回常规的Python 中的列表。
为了测试函数,我们可以创建一个 4D 列表并将其传递给 flatten_any 函数:

list_4d = [[[[1, 2, 3, 4, 5, 6, 7, 8]]]]
print(flatten_any(list_4d))

得到输出如下:

[1, 2, 3, 4, 5, 6, 7, 8]

5. 使用itertools.chain展开列表

事实上,更进一步我们可以使用函数itertools.chain,来将我们的输入original_list中的内部列表连接成一个序列,而无需显示创建新的列表,只需要使用list(...)将结果转化为常规列表即可,代码如下:

import itertools

original_list = [[1, 2, 3], [4, 5], [6, 7, 8]]
flattened_list = list(itertools.chain(*original_list))
print(flattened_list)

得到结果如下:

[1, 2, 3, 4, 5, 6, 7, 8]

使用上述方法,可以有效地展平Python 中的多维嵌套列表。

6. 总结

Python中的展平列表可以使用各种方法实现。我们探索了四种不同的方法:使用Python的原生语法来扁平化2D和3D列表,以及使用NumPy库展平任意维度的列表。每种方法都有自己的优点和局限性,因此请选择需要来选择最适合自己需求的方法。

你可能感兴趣的:(Python,python,开发语言)