Skip to content
Related Articles

Related Articles

Save Article
Improve Article
Save Article
Like Article

Python | Sort list of numbers by sum of their digits

  • Last Updated : 11 May, 2020

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

Examples:

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning - Basic Level Course

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.




# 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))
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.




# 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)
Output:
[10, 12, 31, 15, 106]

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




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



My Personal Notes arrow_drop_up
Recommended Articles
Page :