An easier way to do this? (spoiler if you're using pyschools for fun)

Peter Otten __peter__ at web.de
Tue Nov 9 20:13:47 CET 2010


Matty Sarro wrote:

> Hey everyone,
> I'm working on one of the puzzles on pyschools.com, and am trying to
> figure out if I can make my solution a bit more elegant.
> 
> def getSumOfLastDigit(numList):
>     sumOfDigits=0
>     for i in range(0, len(numList)):
>         num=str(numList.pop())
>         sumOfDigits+=int(num[-1:])
>     return sumOfDigits
> 
> Below is the problem. Basically you take the last digit of each number in
> the list, and add them together.
> 
> Write a function: getSumOfLastDigit(numList) that takes in a list of
> positive numbers and returns the sum of all the last digit in the list.
> 
> *Examples*
> 
>    >>> getSumOfLastDigit([12, 23, 34])
>    9
>    >>> getSumOfLastDigit([2, 3, 4])
>    9
>    >>> getSumOfLastDigit([1, 23, 456])
>    10

Loop over a list directly:

for n in numlist:
   # ...

Use the modulo (%) operator to find the last digit:

last_digit = n % 10

There is a built-in sum() function:

sum([1,2,3]) # 6

There is an inlined form of the for-loop called "generator expression"

sum(i*i for i in [1,2,3]) # 14

Putting it all together:

>>> def gsold(numbers):
...     return sum(i%10 for i in numbers)
...
>>> gsold([12,23,34])
9
>>> gsold([2,3,4])
9
>>> gsold([1,23,456])
10

Peter




More information about the Python-list mailing list