[英]How to flatten one layer of list of list of lists in 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]
但这会将所有层折叠成一维列表。
解决这个问题的最有效方法是什么?
您需要平整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']]
您需要遍历子列表并对其进行索引以获得所需的输出(但这假定您的内部列表仅包含一个元素):
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.