我在弄清楚要写入的代码时遇到了麻烦,该代码会将二维列表合并为三维列表。例如,“ 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]]]
答案 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]]