не работает код на питоне

a = [1, 2, 3, 4, 3, 3, 4, 1]

for i in range(len(a)):
    for j in range(len(a)):
        if i != j:
            if a[i] == a[j]:
                del a[j]

выдает ошибку:

if a[i] == a[j]:
IndexError: list index out of range

почему так? если поставить вместо del - print, то все работает ?????????????


Ответы (2 шт):

Автор решения: Yvdev

Потому что при удалении элемента списка изменяется количество элементов в нем и соответственно длина. Изначально ты передаешь len(a) в качестве аргумента для функции range(), который не изменится пока не закочинтся цикл. С учетом того что оригинальный список "уменьшается" наступает момент когда значение j(от 0 до 7), превышает новую длину списка a.

a = [1, 2, 3, 4, 3, 3, 4, 1] #len(a) =8

for i in range(len(a)):# range(8) до конца цикла
    for j in range(len(a)):# range(8) до конца цикла
        if i != j:
            if a[i] == a[j]:
                del a[j] #здесь len(a) -1 

Например

a = [1,2,3,4,5]
j =7
a[j]

Вызовет: IndexError: list index out of range

→ Ссылка
Автор решения: eri

Такую задачку можно решить удаляя элементы с конца

a = [1, 2, 3, 4, 3, 3, 4, 1]

for i in range(len(a)-1,-1,-1):
    for j in range(len(a)-1,-1,-1):
        if i != j:
            if a[i] == a[j]:
                del a[j]
→ Ссылка