Группировка строки в подстроки - PullRequest
0 голосов
/ 09 июня 2018

Мне нужно объяснить, как работает этот код.Я не понимаю необходимости 'str' и 'grp' в цикле for.Что они отслеживают?

from itertools import groupby
print(["".join(grp) for str, grp in groupby('aaacaccccccbbbb')])

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Не используйте встроенные модули в качестве имен переменных: str,int,set,dict,tuple,list,max,min,...

Если сомневаетесь, разберитесь со списком разложений в его части и предоставьте их для операторов вывода ( Как отлаживать небольшие программы ):

from itertools import groupby
grouping = groupby('aaacaccccccbbbb')

for stri, grp in grouping: 
    print(stri)              # key of the grouping
    print(list(grp))         # group (use list to show it instead of the groupingiterable)
    print("")

Вывод:

a
['a', 'a', 'a']

c
['c']

a
['a']

c
['c', 'c', 'c', 'c', 'c', 'c']

b
['b', 'b', 'b', 'b']

Если у вас все еще есть вопросы по этому поводу, прочитайте API или выполните поиск SO: Как использовать itertools.groupby () в Python

0 голосов
/ 09 июня 2018

groupby группирует последовательные итераторы по некоторым key.Если ключ не указан, предикат группировки по умолчанию состоит в том, что последовательные элементы должны быть одинаковыми.Итак, чтобы подвести итог, groupby группирует идентичные последовательные элементы вместе.

Исчерпывая groupby, вы видите, что он возвращает кортежи:

list(groupby('aaacaccccccbbbb'))

[('a', <itertools._grouper at 0x12f132a58>),
 ('c', <itertools._grouper at 0x12f132d30>),
 ('a', <itertools._grouper at 0x12f132cf8>),
 ('c', <itertools._grouper at 0x12f1b9da0>),
 ('b', <itertools._grouper at 0x12f1a68d0>)]

Каждый кортеж является парой <group_key, [group_values_iterator]>, что соответствует str и grp в понимании списка.grp - это в основном элементы этой группы.Понимание списка исчерпывает итератор grp и объединяет символы.

...