【发布时间】:2020-01-17 18:17:57
【问题描述】:
到一个任意深度嵌套的空列表列表中,我想从列表列表中插入元素。两个列表的长度相同。
例如,我可能想插入
a = [ [1], [2,3], [[4,5]] ]
进入
b = [ [[ ]], [[[[ ]]]], [ ] ]
让我得到
c = [ [[1]], [[[[2,3]]]], [ [4,5] ] ].
我尝试了各种方法,但还没有接近可行的解决方案。
【问题讨论】:
到一个任意深度嵌套的空列表列表中,我想从列表列表中插入元素。两个列表的长度相同。
例如,我可能想插入
a = [ [1], [2,3], [[4,5]] ]
进入
b = [ [[ ]], [[[[ ]]]], [ ] ]
让我得到
c = [ [[1]], [[[[2,3]]]], [ [4,5] ] ].
我尝试了各种方法,但还没有接近可行的解决方案。
【问题讨论】:
对于b的每个子列表,可以迭代地将内部子列表赋值给同一个变量,直到子列表变空,此时可以将a中对应的子列表复制到就地空子列表:
for s, l in zip(a, b):
while l:
l, = l
l[:] = s
这样b 就变成了:
[[[1]], [[[[2, 3]]]], [[4, 5]]]
【讨论】:
你可以使用递归:
a = [ [1], [2,3], [[4,5]] ]
b = [ [[ ]], [[[[ ]]]], [ ] ]
def update(j, k):
return next(k) if not j else [update(i, k) for i in j]
print(update(b, iter(a)))
输出:
[[[1]], [[[[2, 3]]]], [[4, 5]]]
【讨论】: