在 Python 中将 3D 列表转换为 2D 列表的方法

pythonserver side programmingprogramming更新于 2024/1/5 3:23:00

Python 是一种广泛使用的编程语言,用于 Web 开发、数据科学、机器学习等不同目的以及使用自动化执行不同操作。在本文中,我们将了解将 3D 列表转换为 2D 列表的不同方法。

让我们首先看看这两种类型的列表是什么样子的:-

3D 列表

Three_dimensional_list = [
   [['Sam', 'Tom'], ['Miller', 'David']],
   [['Rocky', 'Tyler'], ['Mason', 'Petrick']],
   [['Stefen', 'Damon'], ['Matt', 'Jeremy']]
] # 这是三维列表的基本结构

2D List

Two_dimensional_list = [
   ['Sam', 'Tom'],
   ['Miller', 'David'],
   ['Rocky', 'Tyler'],
   ['Mason', 'Petrick'],
   ['Stefen', 'Damon'],
   ['Matt', 'Jeremy']
] # 这是二维列表的基本结构

将 3D 列表转换为 2D 列表的不同方法

嵌套循环

这是将 3D 列表转换为 2D 列表的最快方法。我们将简单地检查列表中的每个元素并将其展平为 2D 列表。让我们看一下示例以更好地理解它:-

示例

def convert_list_to_2D(main_list): # 3 维列表作为函数 convert_list_to_2D 的输入
   final_list = [] # 创建一个空列表来存储所有二维列表元素
   for sublist in main_list: # 使用 For 循环检查 3D 列表中子列表中的每个元素
      for subsublist in sublist: # 第二个 for 循环检查 3D 列表的子列表的子列表中的每个元素
         final_list.append(subsublist) # 所有子列表都移至最终创建的新列表中
   return final_list

Three_dimensional_list = [
   [['Sam', 'Tom'], ['Miller', 'David']],
   [['Rocky', 'Tyler'], ['Mason', 'Petrick']],
   [['Stefen', 'Damon'], ['Matt', 'Jeremy']]
] # 3D 列表作为输入

Two_Dimensional_list = convert_list_to_2D(Three_Dimensional_list) # 运行函数 convert_list_to_2D
print(Two_Dimensional_list)

输出

上述示例的输出将如下所示:-

[['Sam', 'Tom'], ['Miller', 'David'], ['Rocky', 'Tyler'], ['Mason',
'Petrick'], ['Stefen', 'Damon'], ['Matt', 'Jeremy']] # 3D 列表转换为
2D 列表

列表理解

这是一种非常有效的方法来检查作为输入给出的列表中存在的每个元素。让我们看一下示例以更好地理解它:-

示例

def convert_list_to_2D(main_list): # 三维列表作为函数 convert_list_to_2D 的输入
   return [subsublist for sublist in main_list for subsublist in sublist] # 我们将使用 for 循环检查子列表和子列表的子列表中的每个元素,并将它们转换为二维列表

Three_dimensional_list = [
   [['Sam', 'Tom'], ['Miller', 'David']],
   [['Rocky', 'Tyler'], ['Mason', 'Petrick']],
   [['Stefen', 'Damon'], ['Matt', 'Jeremy']]
] # The 3D list is given as input

Two_Dimensional_list = convert_list_to_2D(Three_Dimensional_list) # 运行函数 convert_list_to_2D
print(Two_Dimensional_list)

# 注意:此方法更可取,因为它是一种紧凑的方法,需要的代码行数更少

输出

上述示例的输出将如下:-

[['Sam', 'Tom'], ['Miller', 'David'], ['Rocky', 'Tyler'], ['Mason',
'Petrick'], ['Stefen', 'Damon'], ['Matt', 'Jeremy']] # 3D 列表转换为 2D 列表

Numpy 库

此方法在以下情况下最有用:列表中的输入数据是数字形式。让我们看一个例子来更好地理解它:-

示例

import numpy as np # 不要忘记导入 numpy,否则可能会发生错误
def convert_list_to_2D(main_list): # 三维列表作为函数 convert_list_to_2D 的输入
   flattened = np.array(main_list).reshape(-1, len(main_list[0][0])) # 在 np.array 的帮助下,我们将输入列表转换为数组,并在 reshape 的帮助下,将数组重塑为二维形式
   return flattened.tolist() # 二维数组形式将借助 tolist 函数转换回列表

Three_dimensional_list = [
   [[14, 28], [33, 47]],
   [[59, 36], [71, 18]],
   [[96, 13], [81, 32]]
] # 列表作为输入

Two_Dimensional_list = convert_list_to_2D(Three_Dimensional_list) # 函数 convert_list_to_2D 运行
print(Two_Dimensional_list)

输出

上述示例的输出将如下所示:-

[[14, 28], [33, 47], [59, 36], [71, 18], [96, 13], [81, 32]] # 3D 列表
转换为 2D 列表

手动迭代

在此方法中,我们将手动检查作为输入给出的列表中的每个元素。让我们看一个例子来更好地理解它:-

示例

def convert_list_to_2D(main_list): # 三维列表作为函数 convert_list_to_2D 的输入
# 我们首先计算二维列表的尺寸
   rows = len(main_list) * len(main_list[0]) # # 2D 列表中的行数由 3D 列表中的子列表数与每个子列表中的子列表数的乘积决定
   cols = len(main_list[0][0])
   output_list = [[0 for _ in range(cols)] for _ in range(rows)] # 创建一个用于存储元素的新列表,并使用 for 循环检查输入列表中的每个元素
   
   for i in range(len(main_list)):
      for j in range(len(main_list[i])):
         for k in range(len(main_list[i][j])):
            output_list[i * len(main_list[i]) + j][k] = main_list[i][j][k] 
# 在新创建的列表中为不同的位置分配适当的值
   
   return output_list

Three_dimensional_list = [
   [['Sam', 'Tom'], ['Miller', 'David']],
   [['Rocky', 'Tyler'], ['Mason', 'Petrick']],
   [['Stefen', 'Damon'], ['Matt', 'Jeremy']]
] # 3D 列表作为输入

Two_Dimensional_list = convert_list_to_2D(Three_Dimensional_list) # 运行函数 convert_list_to_2D
print(Two_Dimensional_list)

输出

上述示例的输出将如下所示:-

[['Sam', 'Tom'], ['Miller', 'David'], ['Rocky', 'Tyler'], ['Mason',
'Petrick'], ['Stefen', 'Damon'], ['Matt', 'Jeremy']] # 3D 列表转换为 2D 列表

结论

了解可用于将 3D 列表转换为 2D 的不同方法非常重要列表以成为一名高效的程序员。可以根据方便程度和程序的应用领域选择上述任何一种方法。


相关文章