Конечно, небезопасно изменять массив, когда вы выполняете итерацию по нему. Спектр говорит, что это плохая идея, и поведение не определено:
http://docs.python.org/tutorial/controlflow.html#for-statements
Итак, следующий вопрос: что именно происходит здесь под капотом? Если бы я должен был догадаться, я бы сказал, что он делает что-то вроде этого:
for(int i=0; i
Если вы полагаете, что это действительно то, что происходит, то это полностью объясняет наблюдаемое поведение. Когда вы удаляете элемент на или до текущего указателя, вы перемещаете весь список на 1 влево. В первый раз вы удаляете 1 - как обычно - но теперь список сдвигается назад. Следующая итерация вместо удара 2, вы нажмете 3. Затем вы удалите 4, и список сдвинется назад. Следующая итерация 7 и т. Д.