Historia de la cuestión:
El método sort() está integrado en el tipo list desde las primeras versiones de Python, mientras que la función sorted() apareció en Python 2.4. La ordenación de colecciones es una de las tareas más comunes en programación, y Python ofrece dos herramientas principales para resolverla.
Problema:
Muchos principiantes confunden sort() (método de lista) y sorted() (función de alto nivel). No comprenden cuándo usar la ordenación in-place, qué objetos se pueden ordenar, cómo establecer un orden arbitrario a través de key/reverse, y a qué trampas posibles puede llevar esto, especialmente con estructuras de datos personalizadas complejas.
Solución:
list.sort() ordena la lista original in situ y devuelve None. Cambia el objeto original.sorted() devuelve una nueva lista ordenada (o de otro tipo, si se pasa uno diferente), sin modificar el original. Funciona con cualquier objeto iterable (incluso generadores).key (función de ordenación) y reverse (bandera booleana para ordenar en orden inverso).Ejemplo de código:
numbers = [5, 2, 9, 1] numbers.sort() # numbers = [1, 2, 5, 9] words = ['aaa', 'ZZZ', 'bbb'] sorted_words = sorted(words, key=str.lower, reverse=True) # sorted_words = ['ZZZ', 'bbb', 'aaa'] # words permanece sin cambios
Características clave:
sort() solo funciona para listas y ordena in-place, sorted() es más versátil — funciona con cualquier objeto iterable.¿Qué devolverá la variable si hacemos my_list = my_list.sort()?
Respuesta: my_list será None, porque sort ordena la lista in situ y devuelve None. Este es un error común: siempre ordene in-place sin asignación, o use sorted si necesita un objeto ordenado como nueva lista.
Ejemplo de código:
lst = [3, 1, 2] lst = lst.sort() # lst ahora es None
¿Se puede ordenar una tupla o una cadena con el método sort()?
Respuesta: No, los objetos inmutables (tuple, str) no tienen el método sort, pero se puede aplicar sorted(), que devuelve una nueva lista ordenada de los elementos.
Ejemplo de código:
tpl = (4, 2, 7) sorted_tpl = sorted(tpl) # sorted_tpl = [2, 4, 7]
¿Se puede ordenar una lista con elementos de diferentes tipos?
Respuesta: En Python 3, ordenar diferentes tipos no comparables (por ejemplo, int y str) genera TypeError. En Python 2 había un orden específico, ahora es necesario indicar explícitamente una función key para generalizar todos los valores a una forma comparable.
Caso negativo
Un programador hizo my_list = my_list.sort(), después de lo cual perdió el acceso a la lista original porque se asignó a None.
Pros:
Contras:
Caso positivo
Usaron sorted() cuidadosamente para obtener una nueva versión sin modificar el original o aplicaron correctamente sort, sin hacer asignaciones.
Pros:
Contras: