Как удалить все дубликаты из списка, кроме одного элемента в Python? - PullRequest
1 голос
/ 30 октября 2011

Я уже знаю, как удалить все дубликаты из List, используя set:

ls = list(set(ls))

Что я хочу знать, есть ли способ удалить все дубликаты, кроме экземпляров одного элемента, так же эффективно, как и метод выше?

ls = [1, 2, 3, 3, 3, 4, 4]
#i want to keep 4, no matter if it is duplicate but want to remove duplicates from rest
so the output should be:
ls = [1, 2, 3, 4, 4]

Одним из возможных решений является перебор элемента и использование условной проверки. Я ищу лучшее решение.

1 Ответ

4 голосов
/ 30 октября 2011

Один из способов будет добавить обратно в дополнительные удаленные 4 s:

sl = list(set(ls))
sl += [4] * (ls.count(4) - 1)

В качестве альтернативы, просто всегда добавляйте 4 s в новый список:

s = set()
sl = []
for elem in ls:
    if elem == 4 or elem not in s:
        sl.append(elem)
        s.add(elem)

Использование set позволяет проверять членство в постоянном времени; если бы вы только использовали списки, это было бы O (n).

При желании вы можете написать его в виде списка, но обычный цикл более читабелен:

s = set()
sl = [s.add(elem) or elem for elem in ls if elem == 4 or elem not in s]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...