我需要一些关于这个代码是如何工作的解释。我不明白为什么在for循环中需要'str‘和'grp’。他们在跟踪什么?
from itertools import groupby
print(["".join(grp) for str, grp in groupby('aaacaccccccbbbb')])
发布于 2018-06-10 04:11:23
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
迭代器并将字符连接在一起。
发布于 2018-06-10 04:11:50
不要使用内置变量名:str,int,set,dict,tuple,list,max,min,...
如果有疑问,请将列表理解分成几个部分,并将它们提供给打印报表(How to debug small programs):
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:How do I use Python's itertools.groupby()?
https://stackoverflow.com/questions/50778096
复制相似问题