Если значения хешируются, самым простым и тупым способом удаления дубликатов является использование set
:
values = mygenerator()
unique_values = set(values)
Но не смотрите: наборы не помнят, какой порядок были изначально выбраны in. Таким образом, это скремблирует последовательность.
Функция ниже может быть лучше, чем set
для вашей цели. Он отфильтровывает дубликаты, не вызывая каких-либо из других значений:
def nub(it):
seen = set()
for x in it:
if x not in seen:
yield x
seen.add(x)
Вызов nub
с одним аргументом, любым итерабельным значениями хеширования. Он возвращает итератор, который создает все те же элементы, но с удалением дубликатов.
itertools.groupby()
может свернуть соседние дубликаты, если вы готовы немного поработать.
print [x[0] for x in itertools.groupby([1, 2, 2, 3])]