我正在努力提高我对itertools
图书馆的了解,因为它通常很有用。为此,我正在尝试解决我遇到的一个面试难题。其中很大一部分涉及顺序计算一个数字中分组和重复数字的数量。例如,对于数字:
1223444556
我想:
[(1,1),(2,2),(1,3),(3,4),(2,5),(1,6)]
也就是说,从左到右,有1个一,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 函数,但我还看不到它。
谢谢!