#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. Большое вам спасибо за этот полезный ответ. Также ознакомьтесь с пониманием списков, поскольку это кажется действительно потрясающим.