繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM