#python #python-2.7 #while-loop
#python #python-2.7 #цикл while
Вопрос:
Может быть, это слишком просто, и я просто не увидел свою ошибку.
while list_a[y] in list_a != list_a[-1]:
print(y);y=y 1
ВОЗВРАТ IndexError: list index out of range
list_a
выглядит так:
['00001', '00001', '00002', '00009', '0000G', '0000K', '0000K', '0000U', '0000U', '00013', '0001B', '0001D', '0001D', '0001L', '0001L', '0001N', '0001Q', '0001Q', '0001R', '0001U']
и моя цель в конце — удалить некоторые элементы из списка во время итерации (вот почему я хочу использовать while
цикл вместо for y in range(len(list_a))
).
Комментарии:
1. Как вы думаете, что делает это условие? Он проверяет, находится ли
list_a[y]
вlist_a
(либо true, либо indexerror), а затем сравнивает это (true) сlist_a[-1]
. Вероятно, это не то, что вы хотели. Вы пробовали просто использоватьwhile y < len(list_a)
?2. в конце цикл выполняет <что-то> до тех пор, пока последняя запись списка не будет выполнена правильно. Затем он снова сравнивает и возникает ошибка
3. (Небольшая поправка:
in
и!=
имеют одинаковый приоритет , поэтомуx in y != z
на самом деле вычисляется как(x in y) and (y != z)
, аналогичноx < y < z
.)
Ответ №1:
Подумайте, что вы пытались сделать:
while list_a[y] != list_a[-1]:
...
т.е. «пока мы смотрим на элемент, который не равен последнему в списке». Однако все равно будут проблемы; что, если элементы появятся в другом месте в списке, которые равны последнему элементу?
Общий способ сделать это — использовать понимание списка для создания нового списка из соответствующих элементов в старом списке:
list_b = [item for item in list_a if some_test(item)]