Ваш метод перебора списков неверен. В настоящее время ваш код перебирает элементы, но тогда не использует этот элемент в вашей логике. Ваш код не содержит ошибок, поскольку значения вашего списка также являются действительными индексами списка.
У вас есть несколько вариантов:
# 1 Перебирать элементы напрямую
Используйте элементы списка при их непосредственном итерировании:
NewList = []
for el in L:
if el not in NewList:
NewList.append(i)
# 2 Перебрать индекс списка
Это часто считается анти-паттерном, но не является недействительным. Вы можете перебирать диапазон размера списка, а затем использовать индексирование списка:
NewList = []
for idx in range(len(L)):
if L[idx] not in NewList:
NewList.append(i)
В обоих случаях обратите внимание, как мы избегаем именования переменных после встроенных модулей. Не используйте list
или List
, вместо этого вы можете использовать L
.
# 3 unique_everseen
Более эффективно реализовать хеширование для сложности поиска O (1). В документах itertools
есть unique_everseen
рецепт , тиражированный в сторонних организациях toolz.unique
. Это работает с использованием seen
набора и отслеживания элементов во время итерации.
from toolz import unique
NewList = list(unique(L))