Что касается вашего последнего вопроса, вот проблема, проиллюстрированная на простом примере:
Допустим, ваш список содержит 5 элементов: list = [1, 2, 3, 4, 5]
, а список элементов для удаления (т. Е. Индексы) - indices_to_remove = [0, 2, 4]
. На первой итерации цикла вы удаляете элемент с индексом 0, поэтому ваш список становится list = [2, 3, 4, 5]
. Во второй итерации вы удаляете элемент с индексом 2, поэтому ваш список становится list = [2, 3, 5]
(как вы можете видеть, это удаляет неправильный элемент). Наконец, в третьей итерации вы пытаетесь удалить элемент с индексом 4, но список содержит только три элемента, поэтому вы получаете исключение вне границ.
Теперь, когда вы видите, в чем проблема, надеюсь, вы сможете найти решение. Удачи!