我正在弄乱各种方法用Python来汇总数字的所有数字,并且有两种方式似乎符合我的需要。
sum(map(int,str(num))) #First Method
def sum_digits(n): #Second Method
total = 0
while n != 0:
total += n%10
n /= 10
return total
在Python 2方法中,我并不感到惊讶,但是当我将相同的代码放入Python 3时,有点让我感到惊讶,第二种方法实际上放慢了速度。我知道地图在python 3中被改变了,这似乎解释了第一种方法的加速,我不明白的是第二种方法的减速。
我的问题是:为什么第二种方法会减慢? (第二种方法在Python 3和Python 2中运行速度慢了两倍)。我的样本数据是所有被认为很长的数字,但我不确定这是否会影响它。
答案 0 :(得分:3)
我可以想象默认情况下,除法是Python 2中的积分和Python 3中的浮点。即使浮点除法本身在现代硬件上与积分除法一样快,将数字重新打包成浮点格式,返回(对于模数)可能会使事情变慢到足以引起注意。
尝试使用专为您的情况发明的divmod
。
另请参阅:a bit of in-depth look into iterating things in Python,幻灯片28和下几个。