Ваша проблема в том, что встроенная функция range(N, M)
будет выполнять итерацию от N до M - 1, поэтому вам не следует устанавливать второй аргумент в len(new_list)-1
, а в len(new_list)
.
См. Ссылку здесь .
Это не заставит ваше первое решение работать, но объяснит, почему вы не получите свой последний элемент.
Заявлено, что это решение не оптимально, способ для достижения этого путем просмотра индексов вручную будет:
new_list = [1,1,1,1,2,2,3,3,3,3,4,5]
updated_lst = []
for i in range(0,len(new_list)):
found = False
for j in range(0, len(updated_lst)):
if new_list[i] == updated_lst[j]:
found = True
break
if not found:
updated_lst.append(new_list[i])
print(updated_lst)
Это все хорошо для изучения, но я бы воздержался от использования этого вне игровой площадки, поскольку это излишне сложно и неэлегантно.
Спасибо @ncasale за помощь в улучшении ответа.
Кстати, ваш первый алгоритм не удалит дубликаты, а только повторы. Другой способ добиться желаемого - это list(set(new_list))
.