我正在努力增强我对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))]