【发布时间】:2017-06-12 01:01:25
【问题描述】:
我正在尝试学习如何在 Python 中使用 itertools.groupby,并且我想找到每组字符的大小。起初我试图看看我是否能找到单个组的长度:
from itertools import groupby
len(list(list( groupby("cccccaaaaatttttsssssss") )[0][1]))
我每次都会得到 0。
我做了一些研究,发现其他人是这样做的:
from itertools import groupby
for key,grouper in groupby("cccccaaaaatttttsssssss"):
print key,len(list(grouper))
效果很好。我感到困惑的是为什么后面的代码可以工作,而前者却不行?如果我只想得到第 n 组,就像我在原始代码中尝试做的那样,我该怎么做?
【问题讨论】:
-
顺便说一句,这只是您想法的一种变体,如果您需要通过 Antlr4 通道保存输入的分区(我确实需要这样做),您可以执行类似
groups = itertools.groupby(tokens.tokens, lambda token: token.channel); groups_lists = [(k, list(grouper)) for k, grouper in groups]的操作。列表推导可能比 Python 循环快一点。