Historial de la pregunta:
Desde el principio, el lenguaje Python ha ofrecido herramientas integradas para ordenar colecciones. Los métodos sort() y la función sorted() aparecieron en la segunda versión de Python, pero a partir de Python 2.4, se introdujo sorted() como un medio universal para ordenar cualquier objeto iterable (no solo listas).
Problema:
A menudo se requiere ordenar datos según diferentes criterios y no siempre se desea cambiar el objeto original. Los principiantes confunden sort() y sorted(), no comprenden dónde se aplica cada uno, y cometen errores con la clave de ordenación y el orden inverso.
Solución:
sorted(objeto_iterable, key=None, reverse=False) siempre devuelve un nuevo objeto lista, sin modificar el original.list.sort(key=None, reverse=False) ordena la lista en su lugar y devuelve None.key es una función que determina según qué criterio se debe ordenar.reverse=True invierte el orden.Ejemplo de ordenación de una lista de cadenas por su longitud, en orden inverso:
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
Características clave:
¿Qué devuelve el método sort()?
El método list.sort() ordena la lista en sí y siempre devuelve None, lo que a menudo se olvida.
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
¿Se puede ordenar una tupla con sort()?
No se puede, las tuplas son inmutables, no tienen el método .sort(). Para ordenar, usa sorted().
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
¿Qué pasará si en key se indica una función que devuelve tipos diferentes?
Se generará una excepción TypeError si los valores devueltos no son comparables entre sí (por ejemplo, int y str).
En una entrevista, se pide devolver una lista ordenada por longitud, y el candidato hace:
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
Ventajas:
Desventajas:
Uso correcto:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
Ventajas:
Desventajas: