Artículo original escrito por Jessica Wilkins  
Artículo original  Python Sort List – How to Order By Descending or Ascending
Traducido y adaptado por andres-torres

En Python, puedes ordenar los datos usando el método sorted(), o bien, el método sort().

En este artículo, proveeré ejemplos para usar los métodos sorted() y sort() a la vez que explicaré las diferencias entre ambos.

¿Qué es el método sort() en Python?

Este método toma una lista y le otorga un orden determinado. Dicho método no posee un valor de retorno.

En este ejemplo, tenemos una lista de números y podemos usar el método sort() para ordenar la lista de forma ascendente.

mi_lista = [67, 2, 999, 1, 15]

# esto imprime la lista NO ordenada
print("Lista desordenada: ", mi_lista)

# Ordenemos la lista
mi_lista.sort()

# aquí tendremos la lista ordenada
print("Lista Ordenada: ", mi_lista)
image-12
Resultado

Si la lista está previamente ordenada, entonces la consola retornará "None".

mi_lista = [6, 7, 8, 9, 10]

# Esto retornará None puesto que la lista ya está ordenada.
print(mi_lista.sort())
#Resultado
None

El método sort() puede tomar dos argumentos opcionales llamados key y reverse.

key  tiene el valor de la función que será llamada en cada ítem de la lista.

En este ejemplo, podemos usar la función len() cómo el valor para el argumento key. key=len indicarán al programa ordenar la lista de nombres por longitud, del más pequeño al más largo.

nombres = ["Jessica", "Ben", "Carl", "Jackie", "Wendy"]

print("Desordenado: ", nombres)
nombres.sort(key=len)
print("Ordenado: ", nombres)
image-13
Resultado, los elementos se han ordenado por la longitud de letras en el nombre.

reverse por otra parte, tiene un valor booleano de True o False.

En este ejemplo, reverse=True ordenará la lista en orden alfabético inverso.

nombres = ["Jessica", "Ben", "Carl", "Jackie", "Wendy"]

print("Desordenado: ", nombres)
nombres.sort(reverse=True)
print("Ordenado: ", nombres)
image-14
Los resultados se han ordenado en orden alfabético (inverso).

Cómo usar el método sorted() en Python

Este método retornará una nueva lista ordenada a partir de un iterable. Ejemplos de iterables serían listas, cadenas y tuplas.

Una diferencia clave entre sort() y sorted() es que sorted() retornará una nueva lista, mientras que  sort() ordena la lista en su lugar.

numeros_ordenados = sorted([77, 22, 9, -6, 4000])

print("ordenados en orden ascendente: ", numeros_ordenados)
image-17

El método sorted() también toma los argumentoskey y reverse de forma óptima.

En este ejemplo, tenemos una lista de números ordenados en orden descendente.reverse=True nos indica al programa que debe invertir la lista, es decir, de mayor a menor.

numeros_ordenados = sorted([77, 22, 9, -6, 4000], reverse=True)

print("Ordenados en orden descendente: ", numeros_ordenados)
image-18

Otra diferencia clave entre sorted() y sort() es que el método sorted() acepta cualquier elemento iterable, mientras que el métodosort() acepta únicamente listas.

En este ejemplo, tenemos una cadena dividida en palabras individuales, usando el métodosplit(). A continuación empleamos el método sorted() para ordenar las palabras por longitud (es decir, el número de letras), de menor a mayor.

enunciado = "Encontré un dólar en la calle"

print("enunciado original: ", enunciado)
print(sorted(enunciado.split(), key=len))
image-19

También podemos modificar este ejemplo e incluir los argumentos key y`reverse.

Este ejemplo modificado mostrará cómo ahora la lista está ordenada por longitud, de mayor a menor.

enunciado = "Encontré un dólar en la calle"

print("enunciado original: ", enunciado)
print(sorted(enunciado.split(), key=len, reverse=True))
image-20

También podemos usar el método sorted() en tuplas: tuples.

En este ejemplo, tenemos una colección de tuplas que representan el nombre de estudiantes de un conservatorio, su edad y el instrumento.

Estudiantes = [
    ('Daniela', 19, 'Clarinete'),
    ('María', 18, 'Arpa'),
    ('José', 20, 'Piano')
]

Podemos usar el método sorted() para ordenar estos datos por la edad del estudiante. La key tiene el valor lambda de la función, lo que indica al programa, ordenar los elementos en orden ascendente.

Una función lambda es una función anónima sin nombre. Puedes definir este tipo de función usando la palabra reservada lambda.

lambda estudiante: estudiante[1]

Para acceder a esta función en el ejemplo anterior de tupla, usamos la notación previa y el índice de número al que quieres acceder. Ya que en Python comenzamos contando desde cero, el valor de la edad sería [1].

He aquí el ejemplo completo:

Estudiantes = [
    ('Daniela', 19, 'Clarinete'),
    ('María', 18, 'Arpa'),
    ('José', 20, 'Piano')
]
print(sorted(Estudiantes, key=lambda estudiante: estudiante[1]))
image-21
Estudiantes en orden de edad, de menor a mayor.

Podemos modificar este ejemplo y ordenar los datos por instrumento. Podemos usar reverse para ordenar los elementos en orden alfabético inverso (de los instrumentos).

Estudiantes = [
    ('Daniela', 19, 'Clarinete'),
    ('María', 18, 'Arpa'),
    ('José', 20, 'Piano')
]

print(sorted(Estudiantes, key=lambda estudiante: estudiante[2], reverse=True))
image-22
Orden alfabético inverso por instrumento.

Conclusión

En este artículo, aprendimos cómo trabajar con los métodos sort() y sorted() de Python.

El método sort() solo funciona con listas y ordena la propia lista seleccionada. No posee un valor de retorno.

Por otra parte, el método sorted() funciona con cualquier iterable y retorna una nueva lista ordenada. Ejemplos de iterables serían, listas, cadenas, y tuplas.

Ambos métodos tienen los argumentos opcionales key y reverse.

key tiene el valor de una función que será llamada en cada ítem de la lista.

reverse tiene un valor booleano de True o False.

Espero hayas aprendido algo nuevo con este artículo.

¡Feliz Aprendizaje!