Оставить только дубликаты значений в списке python 3

Автор: Igor Kirsanov

Задача: в списке значений оставить только дублирующиеся значения. x = [1,2,2,2,3,4,5,6,6,7‌​], нужно получить результат [2,2,2,6,6,], вариант [2,6] не подходит.

Первый вариант решения, O(n)


from collections import Counter

a = [1, 2, 3, 4, 5, 2, 4, 5]
counts = Counter(a)
print([num for num in a if counts[num] > 1])

Второй вариант решения, O(n^2)

a = [1,2,3,4,5,2,4,5]
b = [x for x in a if a.count(x) > 1]
print(b)

На коротких списках второй вариант решения будет работать быстрее. По умолчанию предпочтительнее использовать первый, если заранее не знаем размерность.