0

我正在用各种方法来用 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 时,让我有些惊讶的是,第二种方法实际上变慢了。我知道map在python 3中被改变了,这似乎解释了第一种方法的加速,我不明白的是第二种方法的减速。

我的问题是:为什么第二种方法变慢了?(第二种方法在 Python 3 中的运行速度比 Python 2 慢两倍)。我的样本数据都是被认为很长的数字,但我不确定这是否会影响它。

4

1 回答 1

3

我可以想象,默认情况下除法在 Python 2 中是整数,在 Python 3 中是浮点数。即使浮点除法本身在现代硬件上的速度与整数除法一样快,将数字重新打包为浮点格式并返回(对于modulo) 可能会减慢速度以引起注意。

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

另请参阅:深入了解 Python 中的迭代事物,幻灯片 28 和接下来的几张。

于 2013-07-01T16:02:23.620 回答