@DTHRT

Что не так с циклом For в Python?

Всем привет!
Я только начинаю изучать Python и стал разбирать списки. Вроде все было понятно, до одного момента.

Есть задача:
Сделать программу, которая бы удаляла из списка дублированные цифры.

Решение:
Начал решать задачу циклом For, код:
numbers = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5] #список с нарочными дублями
item_2 = 0

for item in numbers: 
    if item_2 == item:
        print(item) #это я так дебажу
        numbers.remove(item)
    else:
        item_2 = item
print(numbers)


На выходе получаю : [1, 2, 2, 3, 4, 4, 5]
2 и 4 не вырезалась, хотя само if условие успешно отрабатывает (Если я уберу numbers.remove(item) и поставлю просто какой-нибудь print(), то у меня будет ровно столько же print() сколько и дублей, то есть корректно находит все)

Однако, если я меняю код и делают так:
numbers = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
# удалил отсюда item_2 = 0

for item in numbers:
    item_2 = numbers[item] #добавил эту строку
    if item_2 == item:
        print(item)
        numbers.remove(item)
    else:
        item_2 = item #item_2 = 2
print(numbers)


То все отлично отрабатывает. Мой мозг просто взрывается уже, почему первый способ не отработал? Как я понял numbers.remove(item) не отрабатывает. Хоть и решил задачу уже, суть так и не понял.
Объясните пожалуйста, буду очень признателен!)
Всем спасибо!
  • Вопрос задан
  • 401 просмотр
Решения вопроса 1
sanya84
@sanya84
Фанатик Python 3
Вообще лучше так удалять дубли из списка
def main():
    numbers = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
    numbers = [number for number in set(numbers)]
    print(numbers)

if __name__ == '__main__':
    main()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы