Удаление повторяющихся элементов в Python

Рейтинг: -3Ответов: 2Опубликовано: 19.01.2023

Всем привет. Недавно начал изучение Python. И решил попробовать задачу с удалением из списка повторяющихся элементов. Решил несколькими способами, однако со способом, который привел ниже, вопрос возник. Подскажите, пожалуйста, почему все повторяющиеся элементы удалились, кроме числа 28, ведь метод count сам посчитал сколько раз конкретные числа встречаются в списке, а remove должен был удалить те, которые встречаются больше 1 раза?

list1 = [2,28, 3, 7, 3, 6,66, 2, 8, 8,88,23,7,28] 
for i in list1:
  if list1.count(i) > 1:
    list1.remove(i)
print(list1)

Ответы

▲ 1Принят

Если еще актуально.На первой итерации цикла элементом i-тым элементом является число 2. Так как оно имеет дубликат, то соответственно удаляется и на ЭТОЙ ЖЕ итерации i-тым элементом становится число 28. На следующей итерации цикла этот элемент пропускается и цикл смотрит на число 3

▲ 0

Если смотреть через print() что делается на каждом шаге цикла, то видно, что цикл будет пропускать элементы, поскольку сам список изменяется во время выполнения.

list1 = [2,28, 3, 7, 3, 6,66, 2, 8, 8,88,23,7,28]
for i in list1:
  print(i)
  if list1.count(i) > 1:
    list1.remove(i)
    print(list1)

Лучше создавать новый список из неповторяющихся элементов

list1 = [2,28, 3, 7, 3, 6,66, 2, 8, 8,88,23,7,28]
list_changed = []
for i in list1:
  list_changed.append(i)
  if list_changed.count(i) > 1:
    list_changed.pop()
print(list_changed)