Мой список списков изменяется, и я не знаю, почему - PullRequest
0 голосов
/ 30 января 2019

У меня есть этот маленький цикл, который циклически перебирает некоторые числа, а затем перебирает список списка.Если число в первом цикле находится внутри цикла, оно удаляется.Тем не менее, я заметил, что это то есть быть удаленным из списка списка, а не списка из цикла.Код ниже

num_list = [[1,2,3,4,5], [1,2,3,4,5]]
for num in [1,2,3,4,5]:
    for pimp in num_list:
        if num in pimp:
            pimp.remove(num)
        print(pimp)

Тем не менее, он работает, как ожидается, в следующем коде:

for num in [1,2,3,4,5]:
    for pimp in [[1,2,3,4,5], [1,2,3,4,5]]:
        if num in pimp:
            pimp.remove(num)
        print(pimp)

В чем разница?Что мне здесь не хватает?

1 Ответ

0 голосов
/ 30 января 2019

В настоящее время, когда вы делаете for pimp in num_list, вы перебираете ссылку на исходный список num_list.Таким образом, ваши изменения в pimp отражаются в оригинальном вложенном num_list.Чтобы избежать этого, вам нужно создать глубокую копию вашего num_list в цикле for.Это можно сделать с помощью deepcopy, который создает копию вложенных списков, включая все подсписки.

from copy import deepcopy

num_list = [[1,2,3,4,5], [1,2,3,4,5]]
for num in [1,2,3,4,5]:
    for pimp in deepcopy(num_list):
        if num in pimp:
            pimp.remove(num)
        print(pimp)

[2, 3, 4, 5]
[2, 3, 4, 5]
[1, 3, 4, 5]
[1, 3, 4, 5]
[1, 2, 4, 5]
[1, 2, 4, 5]
[1, 2, 3, 5]
[1, 2, 3, 5]
[1, 2, 3, 4]
[1, 2, 3, 4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...