我正在努力增强我对itertools
库的了解,因为它非常有用。为此,我正努力解决我遇到的一个面试难题。其中很大一部分涉及到按顺序计算一个数字中分组和重复的位数。例如,对于数字:
1223444556
我想要:
^{pr2}$也就是说,从左到右,有1个,2个,1个3,等等。在
以下是我当前的代码:
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函数,但我还看不到。在
谢谢!在
怎么样:
我可能会选择收藏来代替:
如果顺序很重要(正如您在评论中所说),这可能不再是最有效的方法。但为了充分考虑,您可以这样做:
^{pr2}$如果你想把y,x列为x,y,你可以这样做:
此方法的一个值是重复元素以字符串形式列出,因此不会混淆哪个数字来自原始列表,哪个数字表示频率。在
我可能只会写信
相关问题 更多 >
编程相关推荐