Я часто использую 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]Закрыто. Принятый ответ помог мне обобщить выводы в моем ответе ниже более общего характера.
Мне нравится использовать встроенные типы для представления, например. древовидные структуры. Вот почему я теперь боюсь смешивать.