цикл while — ошибка IndexError: индекс списка вне диапазона

#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)]