Python 2与Python 3中求和数的代码速度

时间:2013-07-01 15:55:37

标签: python python-2.7 python-3.x

我正在弄乱各种方法用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中运行速度慢了两倍)。我的样本数据是所有被认为很长的数字,但我不确定这是否会影响它。

1 个答案:

答案 0 :(得分:3)

我可以想象默认情况下,除法是Python 2中的积分和Python 3中的浮点。即使浮点除法本身在现代硬件上与积分除法一样快,将数字重新打包成浮点格式,返回(对于模数)可能会使事情变慢到足以引起注意。

尝试使用专为您的情况发明的divmod

另请参阅:a bit of in-depth look into iterating things in Python,幻灯片28和下几个。