Python 如何将一个列表的列表转换为平面列表
嵌套列表是一个将元素视为列表本身的列表。
例如: [[1,2,3], [4,5,6], [7,8,9]] 是一个嵌套列表,因为它有3个列表([1,2,3], [4, 5, 6], 和 [7, 8, 9])作为其元素。
要将一个列表的列表(嵌套列表)展平,即将一个二维列表转换为一个一维列表,可以使用不同的方法,如嵌套的for循环、列表推导、内置函数或通过导入库来实现。
在本文中,我们将讨论上述方法来展平Python中的一个列表。
使用for循环
要重复遍历一个序列,可以使用for循环(可以是列表、元组、字典、集合或字符串)。这更像是面向对象编程语言中的迭代器方法,而不像其他编程语言中的for关键字。
示例
在下面的示例代码中,我们需要将一个嵌套列表转换为一个平面列表,即一个单独的一维列表。所以,我们使用了 append() 方法将元素添加到列表中。
def flatlist(l):
flat_list = []
for element in l:
if type(element) is list:
for item in element:
flat_list.append(item)
else:
lat_list.append(element)
return flat_list
lst = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]]
print('Original List', lst)
print('Flattend List', flatlist(lst))
输出
执行以上程序后的输出如下:
Original List [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]]
Flattend List [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
使用列表推导
Python的列表推导功能使得从现有列表中构建新列表变得简单。它提供了一种更简洁的语法,用于从现有列表和它们的值构建新列表。
示例
在这个示例中,使用列表推导方法将嵌套列表转换为一个单一的一维列表。
original_list = [[10, 20, 30, 40], [50, 60, 70], [80, 90]]
flat_list = [item for sublist in original_list for item in sublist]
print('Original list', original_list)
print('Flattend list', flat_list)
输出
执行以上程序后,将获得以下输出结果。
Original list [[10, 20, 30, 40], [50, 60, 70], [80, 90]]
Flattend list [10, 20, 30, 40, 50, 60, 70, 80, 90]
使用NumPy库
一个用于处理数组的通用包被称为NumPy。它提供了一个多维数组对象,具有出色的速度以及与这些数组交互的能力。
示例
在下面的示例中,我们使用了NumPy库以及其中的其他方法。这些方法如下所示。
- concatenate() 函数用于连接一系列数组。
-
flat() 函数用作对N维数组的1D迭代器。
import numpy
originallist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]]
flatlist = list(numpy.concatenate(originallist).flat)
print('Original list', originallist)
print('Transformed list', flatlist)
输出
执行上述程序后,获得以下输出结果。
Original list [[10, 20, 30, 40], [50, 60, 70], [80, 90]]
Transformed list [10, 20, 30, 40, 50, 60, 70, 80, 90]