Копировать значения из одного вложенного списка в другой пустой вложенный список - PullRequest
0 голосов
/ 09 июня 2019

Я хотел бы переместить значение из одного вложенного списка в другой пустой вложенный список.Более конкретно, я хотел бы скопировать значение тогда и только тогда, когда вложенный список с тем же индексом пуст.

Если у меня есть:

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?

Ответы [ 4 ]

1 голос
/ 09 июня 2019

Вы можете перебирать списки в тандеме следующим образом:

for l, m in zip(L, M):
    if len(m) == 0:
        m[:] = l[:]

Разделение в конце гарантирует, что вы скопируете объект в результирующий подсписок M.

0 голосов
/ 09 июня 2019

Другой способ сделать это - использовать понимание списка:

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)

Та же идея, что и выше ...

0 голосов
/ 09 июня 2019

Использование zip с list-comprehension

[j if j else i for i,j in zip(L,M)]
#[[1], [2], [3], [4]]
0 голосов
/ 09 июня 2019

При выполнении:

for i in M:

Значение i всегда будет значением массива в заданном месте.

Требуется фактический индекс, поэтому просматривайте диапазон от0 к длине индекса.

for i in range(0, len(M)):
    if len(M[i]) == 0:
        M[i] = L[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...