Форум сайта python.su
1
В книге Бизли “Python. Подробный справочник” на странице 343 сказано:
groupby(iterable )Из этой цитаты складывается впечатление, что в принципе может иметь смысл применение groupby к неотсортированной последовательности. Но никак не могу представить случай, когда это будет нужно. Ведь весь смысл группировки в том, чтобы сгруппировать элементы с одинаковыми значениями, а в данном случае это можно сделать только если они отсортированы.
Создает итератор, который группирует одинаковые элементы из итерируемого объекта iterable, следующие друг за другом. Процесс группировки основан на поиске одинаковых элементов. Например, если итерируемый объект iterable возвращает один и тот же элемент несколько раз подряд, этот элемент образует группу. Если функция применяется к отсортированному списку, она образует группы по числу уникальных элементов в списке.
Отредактировано driveman (Апрель 19, 2018 19:53:18)
Офлайн
221
Зачем гадать когда можно посмотреть?
Make an iterator that returns consecutive keys and groups from the iterable. The key is a function computing a key value for each element. If not specified or is None, key defaults to an identity function and returns the element unchanged. Generally, the iterable needs to already be sorted on the same key function.А на вопрос зачем это надо то ответ вполне очевиден:
In [3]: [(x, list(y)) for (x, y) in (groupby('aaabbc'))] Out[3]: [('a', ['a', 'a', 'a']), ('b', ['b', 'b']), ('c', ['c'])] In [4]: [(x, list(y)) for (x, y) in (groupby('abaabbc'))] Out[4]: [('a', ['a']), ('b', ['b']), ('a', ['a', 'a']), ('b', ['b', 'b']), ('c', ['c'])]
Офлайн
drivemanудалить повторы в строке, например
Но никак не могу представить случай, когда это будет нужно. Ведь весь смысл группировки в том, чтобы сгруппировать элементы с одинаковыми значениям
>>> from itertools import groupby >>> s = 'qwerrrrtyq' >>> ''.join([k for k,v in groupby(s)]) 'qwertyq' >>>
Офлайн