我具有以下形式的结构:
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]
但这会将所有图层折叠成一维列表。
解决这个问题的最有效方法是什么?
答案 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]