Для перебора 2 списков в Python для удаления совпадений

#python-3.x #for-loop #iteration

#python-3.x #для цикла #итерация

Вопрос:

У меня есть два списка, которые я хочу просмотреть в Python, чтобы найти совпадения и удалить их. Первый называется SavedWordData и его длина равна 2156, а второй называется listReturned и его длина равна 1000.

Итак, я пытаюсь сделать это:

 maxLenReturned = len(listReturned)
maxLenSaved = len(savedWordData)

    for i in range(maxLenSaved):
    for x in range(maxLenReturned):
        if savedWordData[i] == listReturned[x]:
            savedWordData.pop(i)
  

Но когда я делаю это, я получаю сообщение об ошибке, в котором говорится:
Ошибка IndexError: индекс списка вне диапазона
Что указывает на то, что я выхожу за пределы диапазона некоторых списков, но я не понимаю, почему и какой из списков я выхожу за пределы его диапазона?

Комментарии:

1. Если вы вызываете pop() в списке, он уменьшает его размер. Следовательно, это вызывает исключение.

2. @GurupadMamadapur Хм, хорошо. Как я могу добиться того же, что я хочу сделать, не выполняя pop? Должен ли я создать новый временный список, в котором я сохраняю все данные, которые не совпадают?

Ответ №1:

Когда вы вызываете pop() в списке, он уменьшает его размер, поэтому предположим, что у вас есть список размером 100, и вы извлекли 50 элементов.При попытке извлечь 51-й элемент возникает Index out of range ошибка, потому что теперь размер уменьшается до 50.

Вы должны узнать о понимании списков. Они действительно потрясающие, вы можете выполнить все в одной строке.

 savedWordData = [x for x in savedWordData if x not in listReturned]
  

Вот и все. Все те элементы, которые есть, listReturned отсутствуют внутри savedWordData .

Комментарии:

1. Большое вам спасибо за этот полезный ответ. Также ознакомьтесь с пониманием списков, поскольку это кажется действительно потрясающим.