如果我想求一个数字的各个数字之和,即:
932
14
(9 + 3 + 2)
实现此目的的最快方法是什么?
我本能地这么做了:
sum(int(digit) for digit in str(number))
我在网上找到了这个:
sum(map(int, str(number)))
哪种方法速度最好,还有其他更快的方法吗?
您发布的两行都很好,但您可以纯粹用整数来完成,这样效率最高:
def sum_digits(n): s = 0 while n: s += n % 10 n //= 10 return s
或者divmod:
divmod
def sum_digits2(n): s = 0 while n: n, remainder = divmod(n, 10) s += remainder return s
稍微快一点的是使用单个赋值语句:
def sum_digits3(n): r = 0 while n: r, n = r + n % 10, n // 10 return r
> %timeit sum_digits(n) 1000000 loops, best of 3: 574 ns per loop > %timeit sum_digits2(n) 1000000 loops, best of 3: 716 ns per loop > %timeit sum_digits3(n) 1000000 loops, best of 3: 479 ns per loop > %timeit sum(map(int, str(n))) 1000000 loops, best of 3: 1.42 us per loop > %timeit sum([int(digit) for digit in str(n)]) 100000 loops, best of 3: 1.52 us per loop > %timeit sum(int(digit) for digit in str(n)) 100000 loops, best of 3: 2.04 us per loop