Python | Ordenar lista de números por la suma de sus dígitos

Dada una lista de números no negativos, la tarea es ordenar estos enteros según la suma de sus dígitos.

Ejemplos:

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]

Analicemos algunas formas Pythonic de hacer esta tarea.

Enfoque #1: Comprensión de listas

Usar for loop para convertir cada elemento de la lista en una lista diferente con sus dígitos como elementos. Ahora, use la función ordenada con la función mencionada anteriormente como clave .

# 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))
Producción:

[10, 12, 31, 15, 106]

Enfoque #2: Usarmap()

Este enfoque es similar al enfoque anterior con la ligera diferencia de que, en lugar del bucle for, usamos map()para convertir cada elemento de la lista en una lista diferente con su dígito como elementos y luego seguimos el enfoque similar al anterior.

# 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)
Producción:

[10, 12, 31, 15, 106]

También hay una alternativa de una sola línea al enfoque mencionado anteriormente.

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

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *