Вы получаете ошибку, потому что ваш len(x)
уменьшается каждый раз, когда вы удаляете элемент, тогда как значение i не меняется по сравнению с новым len(x)
.
. Вы можете проверить это, добавив print()
операторов.
Добавляя эти операторы, ваш код теперь выглядит следующим образом:
x = [1,2,3,4,5,6,7,8,9,10]
for i in range(len(x)):
if i%3==0:
print("Before \n i:",i, "len : ",len(x))
x.pop(i)
print("After \n i:",i, "len : ",len(x))
print(x)
Это ваша трассировка стека:
Before
i: 0 len : 10
After
i: 0 len : 9
Before
i: 3 len : 9
After
i: 3 len : 8
Before
i: 6 len : 8
After
i: 6 len : 7
Before
i: 9 len : 7
Traceback (most recent call last):
File "q.py", line 6, in <module>
x.pop(i)
IndexError: pop index out of range
Вы можете внести следующие изменения в код для вывода:
x = [i for i in range(1,11)]
del x[::3]
print(x)