#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'] что соответствует первому встреченному элементу группы.
Комментариев нет:
Отправить комментарий