Извлечение дубликатов из списка после применения сортировки - PullRequest
4 голосов
/ 17 апреля 2019

Я работаю над фрагментом кода, чтобы извлечь дубликаты из списка.Я видел несколько реализаций / решений на этом сайте.Тем не менее, я не понимаю эту строку правильно - синтаксис мудрый, я думаю.После сортировки сравните индекс (x) с индексом (x + 1).Если он добавлен в набор.

print(set([i for i in a if (a[i] == a[i+1]))

a = [1,2,3,2,1,5,6,5,5,5]
print(a)
print(set(sorted(a)))
# l1[i] == l1[i+1]
print(set([i for i in a if (a[i] == a[i+1]))
print(set([i for i in a if sum([1 for item in a if item == i]) > 1]))

Ожидаемые результаты: {1, 2, 5}

Ответы [ 4 ]

5 голосов
/ 17 апреля 2019

вы можете использовать collections.Counter:

from collections import Counter

a = [1,2,3,2,1,5,6,5,5,5]
c = Counter(a)

res = [n for n, m in c.items() if m > 1]
print(res)  # [1, 2, 5]

таким образом вы выполняете итерации один раз по списку и только один раз по счетчику.

2 голосов
/ 17 апреля 2019

Исходя из того, что я понял, вы пытаетесь реализовать эту логику, этот код выполняется с временной сложностью O(nlogn), а код с счетчиком выполняется с временной сложностью O(n), что означает, что он быстрее и чище.

a = [1,2,3,2,1,5,6,5,5,5]
a.sort()
print(set([a[i] for i in range(len(a)-1) if (a[i] == a[i+1])]) )

OUTPUT

set([1, 2, 5])
1 голос
/ 17 апреля 2019

А как насчет этого?

a = [1,2,3,2,1,5,6,5,5,5]
duplicates = set(element for element in a if a.count(element) > 1)
print(duplicates)

Выход:

{1, 2, 5}
0 голосов
/ 17 апреля 2019

Предложите простое решение для поиска дубликатов из Списка.

>>> a = [1,2,3,2,1,5,6,5,5,5]
>>> a.sort()
>>> set([x for x in a if a.count(x) > 1])

Выход: {1, 2, 5}

...