Как удалить дубликаты из списка с помощью этой функции? - PullRequest
0 голосов
/ 05 октября 2019

Я новичок в питоне. Может ли кто-нибудь помочь мне понять, почему не работает следующая функция? Предполагается вернуть новый список с удаленными дубликатами, но вместо этого печатает [4,6].

def remove_duplicates(l):
    solution = []
    for item in l:
        if l.count(item) < 2:
            solution.append(item)
        else:
            l.remove(item)
    return solution


print (remove_duplicates([4,5,5,5,4,6]))

Я думал, что это повторяет один элемент за раз в списке. Таким образом, первые 5 будут иметь счет 3 и будут удалены, вторые пять будут иметь счет 2 и будут удалены, а третьи 5 будут иметь счет 1 и добавлены в список решений. Я не могу обернуть голову, почему 5s будут полностью удалены, а 4s - нет.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Используйте установленный тип данных в python для удаления дубликатов.

a = [4,5,5,5,4,6]
solution = list(set(a))

Вывод:

[4,5,6]
0 голосов
/ 05 октября 2019

Вы не должны удалять элементы из списка, который вы выполняете в данный момент. Итерация выполняется путем внутреннего увеличения индекса.

Если вы хотите сохранить последний вхождение элемента, лучше всего сначала посчитать их:

from collections import Counter
def remove_duplicates(l):
    solution = []
    counts = Counter(l)
    for item in l:
        if counts[item] == 1:
            solution.append(item)
        else:
            counts[item] -= 1
    return solution
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...