如何在python中扁平化列表列表的一层?

时间:2019-02-20 15:48:33

标签: python

我具有以下形式的结构:

lst= [[['A'], ['B'], ['C']], [['A'], ['B'], ['D'], ['E']], [['B'], ['C']]]

我想折叠列表的最内层,以便获得以下结构:

lst= [['A', 'B', 'C'], ['A', 'B', 'D', 'E'], ['B', 'C']]

我已尝试通过以下方式将列表弄平:

[item for sublst in lst for item in sublst]

但这会将所有图层折叠成一维列表。

解决这个问题的最有效方法是什么?

2 个答案:

答案 0 :(得分:2)

您需要展平lst 元素,而不是lst本身。

因此,在另一个列表理解中使用双循环列表理解 ,其中,外部理解会遍历您的顶级列表:

[[item for inner in sublst for item in inner] for sublst in lst]

由于最里面的列表每个只包含一个元素,因此您也可以使用索引来获取这些值:

[[inner[0] for inner in sublst] for sublst in lst]

演示:

>>> lst = [[['A'], ['B'], ['C']], [['A'], ['B'], ['D'], ['E']], [['B'], ['C']]]
>>> [[item for inner in sublst for item in inner] for sublst in lst]
[['A', 'B', 'C'], ['A', 'B', 'D', 'E'], ['B', 'C']]
>>> [[inner[0] for inner in sublst] for sublst in lst]
[['A', 'B', 'C'], ['A', 'B', 'D', 'E'], ['B', 'C']]

答案 1 :(得分:1)

您需要遍历子列表并对其进行索引以获得所需的输出(但这假设您的内部列表仅包含一个元素):

lst= [[['A'], ['B'], ['C']], [['A'], ['B'], ['D'], ['E']], [['B'], ['C']]]

result = [[y[0] for y in x] for x in lst]
# [['A', 'B', 'C'], ['A', 'B', 'D', 'E'], ['B', 'C']]

(可选)您可以使用itertools中的chain.from_iterable(现在,它可以处理内部列表中任意数量的元素):

from itertools import chain

lst= [[['A'], ['B'], ['C']], [['A'], ['B'], ['D'], ['E']], [['B'], ['C']]]

result = [list(chain.from_iterable(x)) for x in lst]