Это интересно, потому что вы на самом деле не мутировали список.
cleanedList = [x for x in range(0, 100, 1)] # Creates list1
idx = 0
for val in cleanedList: # begin iterating list1. It's stored internally here.
check = abs(cleanedList[idx])
print val, check,
idx = idx + 1
if check < 30: ##### Change the list it is looping now
cleanedList = [x for x in range(60,100,2)] # reassign here, but it becomes list2.
Вывод рассказывает историю:
0 0 1 62 2 64 3 66 4 68 5 70 6 72 7 74 8 76 9 78 10 80 11 82 12 84 13 86 14 88 15 90 16 92 17 94 18 96 19 98
Поскольку вы не мутировали,Вы переназначили, висящая ссылка на список, который вы перебираете изначально, все еще существует для контекста цикла for, и она продолжается далеко за концом списка 2, поэтому в конечном итоге вы выбрасываете IndexError
- есть 100 элементовв вашем первом списке, и только 20 в вашем втором списке.