python – 更有效地使用itertools.groupby()

我正在努力增强我对itertools库的了解,因为它通常很有用.为此,我试图解决我遇到的一个采访益智游戏.其中很大一部分涉及顺序计算一个数字内的分组和重复数字的数量.例如,对于数字:

1223444556

我想要:

[(1,1),(2,2),(1,3),(3,4),(2,5),(1,6)]

也就是说,从左到右,有1个,2个,2个,1个,等等.

这是我目前的代码:

from itertools import groupby
groups_first = [int(''.join(v)[0]) for k,v in groupby(str(1223444556))]
counts = [len(''.join(v)) for k,v in groupby(str(1223444556))]
zip(counts,groups_first)

它有效,但我想知道的是,是否有一种更紧凑的方式来绕过两个列表.有什么想法吗?我想这可能会在groupby()中做一些lambda函数,但我还没看到它.

谢谢!

解决方法:

怎么样:

[(sum(1 for _ in v), int(k)) for k,v in groupby(str(1223444556))]
上一篇:python中的高效列表映射


下一篇:python – 字符串包含细长的单词