Каков хороший питонический способ поиска повторяющихся объектов?

Я часто использую sortedи groupbyдля поиска повторяющихся элементов в итерируемом объекте. Теперь я вижу, что это ненадежно:

from itertools import groupby
data = 3 * ('x ',  (1,), u'x')
duplicates = [k for k, g in groupby(sorted(data)) if len(list(g)) > 1]
print duplicates
# [] printed - no duplicates found - like 9 unique values

Причина, по которой приведенный выше код не работает в Python 2.x, объясняется здесь.

Что такое надежный питонический способ поиска дубликатов?

Я искал похожие вопросы/ответы на SO. Лучшим из них является «Как в Python взять список и свести его к списку дубликатов?», но принятое решение не питоническое (это процедурное многострочное для ... if . .. add ... else ... add ... вернуть результат), а другие решения ненадежны (зависит от невыполненной транзитивности оператора "

[EDIT]Закрыто. Принятый ответ помог мне обобщить выводы в моем ответе ниже более общего характера.

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

8
задан Community 23 May 2017 в 12:32
поделиться