我想将一个嵌套列表中的值移动到另一个空嵌套列表中。更具体地说,当且仅当具有相同索引的嵌套列表为空时,我才想复制该值。
如果我有:
L = [[1], [2.718], [3.14], [4]]
M = [[], [2], [3], []]
我想返回:
M = [[1], [2], [3], [4]]
我知道我可以通过以下方式手动完成每个任务:
M[0].append(L[0][0])
M[3].append(L[3][0])
但是我想使用for循环来处理更大的列表。
我尝试做
for i in M:
if bool(i)==False:
M[i].append(L[i][0])
但这给我最后一行“ TypeError:列表索引必须是整数,而不是列表”。关于如何修复for循环的任何想法?
答案 0 :(得分:1)
您可以依次遍历列表,如下所示:
for l, m in zip(L, M):
if len(m) == 0:
m[:] = l[:]
最后的切片将确保您将对象复制到M
的结果子列表中。
答案 1 :(得分:0)
这样做时:
for i in M:
i的值将始终是给定位置中数组的值。
您需要实际的索引,因此请在0到索引长度之间的范围内循环。
for i in range(0, len(M)):
if len(M[i]) == 0:
M[i] = L[i]
答案 2 :(得分:0)
将zip
与list-comprehension
一起使用
[j if j else i for i,j in zip(L,M)]
#[[1], [2], [3], [4]]
答案 3 :(得分:0)
另一种方法是使用列表理解:
L = [[1], [2.718], [3.14], [4]]
M = [[], [2], [3], []]
M = [m if len(m)>0 else l for l, m in zip(L, M)]
print(M)
与上述相同...