总结一个数字的数字 – python

如果我想查找一个数字的总和,即:

  • input: 932
  • 输出: 14 ,即(9 + 3 + 2)

这样做的最快方法是什么?

我本能地做了:

 sum(int(digit) for digit in str(number)) 

我在网上find了这个:

 sum(map(int, str(number))) 

哪个最好用于速度,还有其他更快的方法吗?

你可以纯粹用整数来完成,而且这将是最有效率的:

 def sum_digits(n): s = 0 while n: s += n % 10 n //= 10 return s 

或与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 

如果你想不断总结数字,直到你得到一个单一的数字 (我最喜欢的可以被9整除的特征之一),你可以这样做:

 def digital_root(n): x = sum(int(digit) for digit in str(n)) if x < 10: return x else: return digital_root(x) 

事实上,它本身就相当快

 %timeit digital_root(12312658419614961365) 10000 loops, best of 3: 22.6 µs per loop 

这可能有帮助

 def digit_sum(n): num_str = str(n) sum = 0 for i in range(0, len(num_str)): sum += int(num_str[i]) return sum 

做一些Codecademy的挑战我解决了这个问题:

 def digit_sum(n): arr = [] nstr = str(n) for x in nstr: arr.append(int(x)) return sum(arr) 

你也可以使用这个:

 def sum_digits(num): num = str(num) digitSum = 0 for i in num: digitSum += int(i) return digitSum print sum_digits(875) 
 n = str(input("Enter the number\n")) list1 = [] for each_number in n: list1.append(int(each_number)) print(sum(list1))