Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in Python by (50.2k points)

In python, I want to calculate the sum of the digits of a number, i.e.:

Input: 932

Output: 14, which is (9 + 3 + 2)

What is the fastest way of doing this?

My code:

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

and I found this online:

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

Which is the best way?

1 Answer

0 votes
by (108k points)

Your codes are perfectly fine, but you can do it purely in integers, and it will be the most efficient:

def sum_digits(n):

    s = 0

    while n:

        s += n % 10

        n //= 10

    return s

or with divmod:

def sum_digits2(n):

    s = 0

    while n:

        n, remainder = divmod(n, 10)

        s += remainder

    return s

You can also use the below code for better performance:

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

If you are a beginner and want to know more about Python, then do check out the python tutorial that will help you out in a better way. 

Related questions

0 votes
1 answer
asked Feb 25, 2021 in Python by RohitSingh (2.6k points)
0 votes
1 answer
asked Feb 15, 2021 in Java by sheela_singh (9.5k points)
0 votes
1 answer
asked Aug 12, 2019 in Java by Anvi (10.2k points)
0 votes
1 answer

Browse Categories

...