Python | Sort list of numbers by sum of their digits

Given a list of non-negative numbers, the task is to sort these integers according to the sum of their digits.

Examples:

Input : [12, 10, 106, 31, 15]
Output : [10, 12, 31, 15, 106]

Input : [1111, 19, 29, 11, 12, 9]
Output : [11, 12, 1111, 9, 19, 29]

Let’s discuss few Pythonic ways to do this task.

Approach #1 : List comprehension

Using for loop to convert each element of list to a different list with its digits as elements. Now, use the sorted function with the above-mentioned function as key.

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 Program to Sort list of
# integers according to sum of digits
  
def sortList(lst):
    digits = [int(digit) for digit in str(lst) ]
    return sum(digits)
      
# Driver Code
lst = [12, 10, 106, 31, 15]
print(sorted(lst, key = sortList))

chevron_right


Output:

[10, 12, 31, 15, 106]

Approach #2 : Using map()

This approach is similar to the above approach with a slight difference that instead of for loop, we use map() to convert each element of list to a different list with its digit as elements and then follow the similar approach as above.

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 Program to Sort list of
# integers according to sum of digits
  
def sortList(num):
    return sum(map(int, str(num)))
      
# Driver Code
lst = [12, 10, 106, 31, 15]
result = sorted(lst, key = sortList)
print(result)

chevron_right


Output:

[10, 12, 31, 15, 106]

There is also a one-liner alternative to the above mentioned approach.

filter_none

edit
close

play_arrow

link
brightness_4
code

def sortList(lst):
    return sorted(lst, key = lambda x:(sum(map(int, str(x)))))

chevron_right




My Personal Notes arrow_drop_up


If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.