繁体   English   中英

将3D列表更改为2D列表

[英]changing a 3D list into a 2D list

我想将3D列表(list_1)转换为2D列表(list_2)。 例如:

list_1: [[[3], [4]], [[5], [6]], [[7], [8]]]
list_2: [[3, 4], [5, 6], [7, 8]]

这是我已经尝试过的:

[e for sl in lst for e in sl]

但是结果会有所不同:

[[3], [4], [5], [6], [7], [8]]

出于可读性考虑,我建议使用itertools.chain将此处的内部列表展平:

from itertools import chain
l = [[[3], [4]], [[5], [6]], [[7], [8]]]

[list(chain.from_iterable(i)) for i in l]
# [[3, 4], [5, 6], [7, 8]]

按照您的方法,您需要进行额外的循环以平化内部列表:

[[i for e in sl for i in e] for sl in l]
# [[3, 4], [5, 6], [7, 8]]

另外一个选项:

[reduce(list.__add__, x)  for x in list_1]

您也可以这样:

l = [[[3], [4]], [[5], [6]], [[7], [8]]]

print ([sum(item, []) for item in l])

输出:

[[3, 4], [5, 6], [7, 8]]

您接近:

[[c for b in a for c in b] for a in lst]

如果所有嵌套列表都包含单个元素,则可以使用拆包:

d = [[[3], [4]], [[5], [6]], [[7], [8]]]
new_d = [[i for [i] in b] for b in d]

输出:

[[3, 4], [5, 6], [7, 8]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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