在Python中扁平化列表的方法

570 阅读3分钟

列表是 Python 中最灵活的数据结构之一。将一个列表转变为一个列表,称为 "扁平化列表"。一个 Python 列表可以包含多个维度。这意味着你有一个列表中的列表。这些列表有时被称为**"嵌套列表",**可以被转换回一个普通的列表。

如何扁平化列表

要在 Python 中平坦化一个列表,可以使用列表理解或导入库,如itertoolsnumpy来完成这个工作。当涉及到嵌套列表时,有两种类型的嵌套列表:

  1. 不规则嵌套列表
  2. 规则嵌套列表

这个列表的每个元素都是一个子列表,从而坚持了元素类型的统一性。这个列表的每个元素都是一个子列表或一个非列表项。因此,在元素类型方面存在着不规则性。

使用列表理解法

当你想根据现有列表的值创建一个新的列表时,列表理解提供了一个更短的语法。列表理解由包含表达式的括号组成,表达式针对每个元素执行,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中扁平化列表的方法。