求和数字的数字 - python

求和数字的数字 - python

如果我想找到数字的数字之和,即:

  • 输入: 932

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

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

我本能地做了:

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

我在网上找到了这个:

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

哪种方法最适合速度,还有其他方法更快吗?


守着星空守着你
浏览 826回答 3
3回答

杨__羊羊

你可以纯粹用整数做它,它将是最有效的: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&nbsp;digital_root(n): &nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;sum(int(digit)&nbsp;for&nbsp;digit&nbsp;in&nbsp;str(n)) &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;x&nbsp;<&nbsp;10: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;digital_root(x)事实证明这本身就很快......%timeit&nbsp;digital_root(12312658419614961365)10000&nbsp;loops,&nbsp;best&nbsp;of&nbsp;3:&nbsp;22.6&nbsp;µs&nbsp;per&nbsp;loop

呼啦一阵风

这可能有所帮助def&nbsp;digit_sum(n): &nbsp;&nbsp;&nbsp;&nbsp;num_str&nbsp;=&nbsp;str(n) &nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;=&nbsp;0 &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(0,&nbsp;len(num_str)): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;int(num_str[i]) &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sum
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python