Может ли итератор быть обнулен (не итерируемый, итератор)? [Дубликат]

4
задан cynicaljoy 19 November 2010 в 23:47
поделиться

2 ответа

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

10
ответ дан Jason Orendorff 24 August 2018 в 04:45
поделиться

itertools.groupby() может свернуть соседние дубликаты, если вы готовы немного поработать.

print [x[0] for x in itertools.groupby([1, 2, 2, 3])]
3
ответ дан Ignacio Vazquez-Abrams 24 August 2018 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: