Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

Почему рецепт unique_justseen() из Itertools Recipes так сложно реализован?

#python #python_3x #iterator


В документации Питона в разделе 10.1.2. Itertools Recipes находится такой рецепт:


def unique_justseen(iterable, key=None):
    "List unique elements, preserving order. Remember only the element just seen."
    # unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
    # unique_justseen('ABBCcAD', str.lower) --> A B C A D
    return map(next, map(operator.itemgetter(1), itertools.groupby(iterable, key)))



По моему это напрасно сложное, так как команду return возможно написать так:

     return map(operator.itemgetter(0), itertools.groupby(iterable, key))


Это прекрасно работает, но может быть, что я что-то не заметил а существует такой
пример iterable, с которым "официальная" версия работает правильно, но моя нет.

Знаете такой случай, или мой подход кажется правильным?
    


Ответы

Ответ 1



Вариант map(operator.itemgetter(0), itertools.groupby(iterable, key)) не является верным, так как вы вернете значения ключа полученное при использовании функции key. То есть при выполнении map(operator.itemgetter(0), itertools.groupby('AabBCC', str.lower)) вы получите результат ['a', 'b', 'c'] соответствующий ключам, но не первому встреченному элементу. Выполняя map(next, map(operator.itemgetter(1), itertools.groupby('AabBCC', str.lower))) получим ['A', 'b', 'C'] что соответствует первому встреченному элементу группы.

Комментариев нет:

Отправить комментарий