在python中安排嵌套列表

时间:2014-09-19 12:06:49

标签: python list

考虑python中的以下列表:

[[[1, 2], [3, 4], [5, 6], [7, 8]],
 [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']],
 [[21, 22], [23, 24], [25, 26], [27, 28]]]

顶级列表包含3个列表值,其中包含4个单独的列表。 我需要按以下顺序安排这些列表:

[[1, 2, 'a', 'b', 21, 22],
 [3, 4, 'c', 'd', 23, 24],
 [5, 6, 'e', 'f', 25, 26],
 [7, 8, 'g', 'h', 27, 28]]

我试图使用itertools,for循环,列表理解等来实现这个要求但是无法得到它。你能为我提供能够满足这一要求的必要python代码吗?

2 个答案:

答案 0 :(得分:2)

您需要在此处使用zip(),然后使用子列表展平生成的元组:

[[i for sub in combo for i in sub] for combo in zip(*inputlist)]

演示:

>>> inputlist = [[[1, 2], [3, 4], [5, 6], [7, 8]],
...  [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']],
...  [[21, 22], [23, 24], [25, 26], [27, 28]]]
>>> [[i for sub in combo for i in sub] for combo in zip(*inputlist)]
[[1, 2, 'a', 'b', 21, 22], [3, 4, 'c', 'd', 23, 24], [5, 6, 'e', 'f', 25, 26], [7, 8, 'g', 'h', 27, 28]]

答案 1 :(得分:1)

itertoolsmap一起使用:

>>> from itertools import chain, izip, starmap
>>> map(list, starmap(chain, izip(*lst)))
[[1, 2, 'a', 'b', 21, 22],
 [3, 4, 'c', 'd', 23, 24],
 [5, 6, 'e', 'f', 25, 26],
 [7, 8, 'g', 'h', 27, 28]]