列表是 Python 中最灵活的数据结构之一。将一个列表转化为一个列表被称为 "扁平化的列表"。一个 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中扁平化列表的方法。