列表是 Python 中最灵活的数据结构之一。将一个列表转变为一个列表,称为 "扁平化列表"。一个 Python 列表可以包含多个维度。这意味着你有一个列表中的列表。这些列表有时被称为**"嵌套列表",**可以被转换回一个普通的列表。
如何扁平化列表
要在 Python 中平坦化一个列表,可以使用列表理解或导入库,如itertools或numpy来完成这个工作。当涉及到嵌套列表时,有两种类型的嵌套列表:
- 不规则嵌套列表
- 规则嵌套列表
这个列表的每个元素都是一个子列表,从而坚持了元素类型的统一性。这个列表的每个元素都是一个子列表或一个非列表项。因此,在元素类型方面存在着不规则性。
使用列表理解法
当你想根据现有列表的值创建一个新的列表时,列表理解提供了一个更短的语法。列表理解由包含表达式的括号组成,表达式针对每个元素执行,for 循环用来迭代每个元素。
original_list = [[11, 21, 30], [19, 63, 71], [81, 99]]
flatten_list = [element for sublist in original_list for element in sublist]
print("Original list", original_list)
print("Flattened list", flatten_list)
输出
Original list [[11, 21, 30], [19, 63, 71], [81, 99]]
Flattened list [11, 21, 30, 19, 63, 71, 81, 99]
你可以看到我们已经将一个列表扁平化了。
列表理解为创建列表提供了一种简洁的方法。
使用 itertools 扁平化 list of Lists itertools
使用itertools是将二维列表转换为单一的扁平列表的理想选择。它通过依次迭代作为参数传递的迭代器,将连续的序列处理成一个单一的序列。
import itertools
original_list = [[11, 21, 30], [19, 63, 71], [81, 99]]
flatten_list = list(itertools.chain(*original_list))
print("Original list", original_list)
print("Flattened list", flatten_list)
输出
Original list [[11, 21, 30], [19, 63, 71], [81, 99]]
Flattened list [11, 21, 30, 19, 63, 71, 81, 99]
我们在输出中得到了扁平化的列表。
虽然itertools是一种有效的扁平化列表的方法,但它比我们讨论的最后一种方法更先进。
这是因为你必须在你的代码中导入itertools,这就引入了一个新的依赖关系。更重要的是,chain()方法涉及到解包,这可能很难理解。
使用 numpy 扁平化列表(concatenate() 和 flat()
要在Python中扁平化一个列表,可以使用numpy库、concatenate()和flat()函数的组合。Numpy提供了常见的操作,其中包括将规则的二维数组按行或按列连接起来。我们还使用flat属性在数组上获得一个一维迭代器来实现我们的目标。
import numpy as np
original_list = [[11, 21, 30], [19, 63, 71], [81, 99]]
flatten_list = list(np.concatenate(original_list). flat)
print("Original list", original_list)
print("Flattened list", flatten_list)
输出
Original list [[11, 21, 30], [19, 63, 71], [81, 99]]
Flattened list [11, 21, 30, 19, 63, 71, 81, 99]
这就是在Python中扁平化列表的方法。