如何将二维列表和三维列表合并在一起?

时间:2019-10-06 17:39:14

标签: python python-3.x list multidimensional-array merge

我在弄清楚要写入的代码时遇到了麻烦,该代码会将二维列表合并为三维列表。例如,“ a”是二维列表,“ b”是三维列表,我想将它们合并在一起并按顺序排序。如果可能的话,可以通过理解列表理解来完成吗?再举一个例子,下面是我的两个清单。

a = [[7, 28],[28],[28]]
b = [[[3, 9],[3, 9],[3, 9]],[[3, 4],[4, 7],[4, 7]],[[7, 11],[3, 11],[3, 7, 12]]]

我希望我的结果成为

c = [[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],
     [[3, 4, 28],[4, 7, 28],[4, 7,28]],
     [[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]]

4 个答案:

答案 0 :(得分:2)

如果您喜欢单线:

result = [[sorted(i+x) for i in y] for x, y in zip(a,b)]

print (result)

#[[[3, 9, 7, 28], [3, 9, 7, 28], [3, 9, 7, 28]], [[3, 4, 28], [4, 7, 28], [4, 7, 28]], [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]

答案 1 :(得分:1)

尝试一下:

c = [[sorted(i+k) for k in j] for i,j in zip(a,b)]

输出

[[[3, 7, 9, 28], [3, 7, 9, 28], [3, 7, 9, 28]], 
 [[3, 4, 28], [4, 7, 28], [4, 7, 28]], 
 [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]

这是没有单线的另一种方式:

c = b[:]
for i,j in zip(a,c):
    for k in j:
        k.extend(i)
        k.sort()

答案 2 :(得分:1)

使用enumerate代替zip的另一种1-liner:

c = [[sorted(s1+a[i]) for s1 in s0] for i, s0 in enumerate(b)]

答案 3 :(得分:1)

这应该有效:

c = [[sorted(i+x) for i in y] for x, y in zip(a,b)]

print(c)
#[[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],[[3, 4, 28],[4, 7, 28],[4, 7,28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]