ProgramaciónDesarrollador Python

¿Cómo funciona la función sorted() en Python, en qué se diferencia del método sort() de las listas, qué matices hay al usar la clave key y el parámetro reverse?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

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.
  • El parámetro 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:

  • sorted() siempre devuelve una nueva lista, sin tocar la fuente
  • sort() solo opera en la propia lista, no devuelve un nuevo objeto
  • la opción key puede ser cualquier función que devuelva valores para la comparación

Preguntas capciosas.

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

Errores comunes y anti-patrones

  • Usar sort(), esperando una nueva lista ordenada
  • Intentar ordenar un objeto inmutable mediante el método sort()
  • Pasar a key una función que devuelve valores de tipos heterogéneos

Ejemplo de la vida real

Caso negativo

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:

  • Modifica la lista en su lugar (a veces ahorra memoria)

Desventajas:

  • Devuelve None, lo que rompe la lógica posterior

Caso positivo

Uso correcto:

lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']

Ventajas:

  • La lista original no se modifica
  • Obtenemos el resultado esperado

Desventajas:

  • Ocupa memoria adicional para la nueva lista