- 1 1. Introducción
- 2 2. Métodos de ordenación de listas
- 3 3. Personalización de la ordenación
- 4 4. Puntos a considerar al ordenar
- 5 5. TimSort: algoritmo de ordenación predeterminado de Python
- 6 6. Comparación de rendimiento de sort() y sorted()
- 7 7. Técnicas útiles para ordenar listas
- 8 8. Errores comunes y solucionesTypeError: ‘<‘ not supported between instances
- 9 9. Preguntas frecuentes (FAQ)
1. Introducción
Python se usa ampliamente como un lenguaje de programación simple e intuitivo. Dentro de ello, la «ordenación de listas» es una de las operaciones básicas y más frecuentemente utilizadas. En este artículo, explicaremos detalladamente los métodos de ordenación de listas en Python, y también presentaremos formas de personalización y consideraciones.
Al leer este artículo, incluso los principiantes podrán comprender cómo ordenar listas de manera eficiente y podrán aplicar ese conocimiento en programas reales.
2. Métodos de ordenación de listas
Python tiene principalmente dos métodos de ordenación. Veamos sus características y cómo usarlos.
2.1 Ordenación usando el método sort()
sort()
es un método disponible en los objetos lista, ordena la lista original directamente. Por defecto se ordena en orden ascendente (de menor a mayor), pero si se especifica reverse=True
, se ordena en orden descendente (de mayor a menor).
Uso básico
numbers = [3, 1, 4, 1, 5]
numbers.sort()
print(numbers) # Salida: [1, 1, 3, 4, 5]
Cuando se ordena en forma descendente
numbers = [3, 1, 4, 1, 5]
numbers.sort(reverse=True)
print(numbers) # Salida: [5, 4, 3, 1, 1]
2.2 Ordenación usando la función sorted()
sorted()
devuelve una nueva lista ordenada sin modificar la lista original. También por defecto es ascendente, y si se usa reverse=True
se puede obtener orden descendente.
Uso básico
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # Salida: [1, 1, 3, 4, 5]
print(numbers) # Salida: [3, 1, 4, 1, 5] La lista original no se modifica
Orden descendente
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # Salida: [5, 4, 3, 1, 1]

3. Personalización de la ordenación
En Python, es posible usar el argumento key
para ordenamiento personalizado. Resulta útil cuando se desea reordenar una lista con reglas propias.
3.1 Ordenación usando el argumento key
Ordenar por longitud de cadena
Si los elementos de la lista son cadenas, al especificar la función len
en key
, la ordenación se basa en la longitud de las cadenas.
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words) # ['date', 'apple', 'banana', 'cherry']
3.2 Ordenar una lista de diccionarios
Al ordenar una lista que contiene diccionarios, se puede usar la función lambda
en el argumento key
para ordenar según una clave específica.
Ordenar por valores numéricos dentro del diccionario
fruits = [
{'name': 'apple', 'price': 100},
{'name': 'banana', 'price': 50},
{'name': 'cherry', 'price': 150}
]
fruits.sort(key=lambda x: x['price'])
print(fruits)
# [{'name': 'banana', 'price': 50}, {'name': 'apple', 'price': 100}, {'name': 'cherry', 'price': 150}]
Ordenar con múltiples condiciones
Si los precios son iguales y se desea ordenar por nombre, se especifica una tupla en key
.
fruits.sort(key=lambda x: (x['price'], x['name']))
print(fruits)
# [{'name': 'banana', 'price': 50}, {'name': 'apple', 'price': 100}, {'name': 'cherry', 'price': 150}]
4. Puntos a considerar al ordenar
4.1 Cuando se mezclan diferentes tipos de datos
Si la lista contiene números y cadenas mezclados, se producirá TypeError
. Tenga cuidado.
mixed_list = [3, 'apple', 2]
mixed_list.sort()
# Salida: TypeError: '<' not supported between instances of 'str' and 'int'
Solución
Unifique los tipos de datos o use una ordenación personalizada.
mixed_list = [3, 'apple', 2]
mixed_list = [str(x) for x in mixed_list]
mixed_list.sort()
print(mixed_list) # ['2', '3', 'apple']
4.2 Estabilidad de la ordenación
La ordenación en Python es «estable». Si hay valores idénticos, se conserva el orden original de la lista.
data = [(1, 'a'), (2, 'b'), (1, 'c')]
data.sort(key=lambda x: x[0])
print(data) # [(1, 'a'), (1, 'c'), (2, 'b')]

5. TimSort: algoritmo de ordenación predeterminado de Python
En Python, se utiliza el algoritmo TimSort (TimSort) para ordenar listas. Es un algoritmo estable que combina merge sort y insertion sort.
Características de TimSort
- Ordenación estable: Se mantiene el orden de los elementos con el mismo valor.
- Procesamiento rápido: Es eficiente para conjuntos de datos reales y rápido en casos promedio.
- Rendimiento fuerte con datos parcialmente ordenados: El rendimiento mejora especialmente para datos que ya están parcialmente ordenados.
6. Comparación de rendimiento de sort() y sorted()
El método sort()
y la función sorted()
de Python tienen diferencias de comportamiento, por lo que también debemos comprender el rendimiento.
Diferencias básicas
Características | sort() | sorted() |
---|---|---|
Objetivo de la operación | Modificar la lista original | Crear una nueva lista |
Valor de retorno | Ninguno (devuelve None ) | Nueva lista ordenada |
Caso de uso | Cuando está bien que la lista se modifique | Cuando se desea conservar la lista original |
Comparación de rendimiento
sort()
es ligeramente más rápido que sorted()
. Esto se debe a que sort()
ordena la lista directamente, por lo que no se genera costo adicional de memoria.
Ejemplo de benchmark
import time
numbers = [3, 1, 4, 1, 5] * 100000
# Medición de sort()
start = time.time()
numbers.sort()
end = time.time()
print("Tiempo de procesamiento de sort():", end - start)
# Medición de sorted()
numbers = [3, 1, 4, 1, 5] * 100000
start = time.time()
sorted_numbers = sorted(numbers)
end = time.time()
print("Tiempo de procesamiento de sorted():", end - start)
Por lo tanto, es importante seleccionar adecuadamente sort()
y sorted()
según el caso de uso.

7. Técnicas útiles para ordenar listas
Forma sencilla de ordenar en orden inverso
sort()
y sorted()
sin usar, también hay una forma de ordenar la lista en orden inverso.
numbers = [1, 2, 3, 4, 5]
reverse_numbers = numbers[::-1]
print(reverse_numbers) # Salida: [5, 4, 3, 2, 1]
8. Errores comunes y solucionesTypeError: ‘<‘ not supported between instances
- Causa: Cuando la lista contiene tipos de datos diferentes (por ejemplo, números y cadenas).
- Solución: Unifique los tipos de datos o procese explícitamente con una ordenación personalizada.
Ejemplo
# Código que genera un error
mixed_list = [3, 'apple', 2]
mixed_list.sort() # TypeError
# Solución
mixed_list = [str(x) for x in mixed_list]
mixed_list.sort()
print(mixed_list) # ['2', '3', 'apple']
9. Preguntas frecuentes (FAQ)
Q1: sort()
y sorted()
, ¿cuál es la diferencia?
A:
sort()
método: Ordena el contenido de la lista directamente. La lista original se modifica.sorted()
función: Devuelve una nueva lista ordenada. La lista original no se modifica.
Ejemplo
numbers = [3, 1, 4, 1, 5]
# caso de usar sort()
numbers.sort()
print(numbers) # [1, 1, 3, 4, 5] - la lista original se modifica
# caso de usar sorted()
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 1, 3, 4, 5]
print(numbers) # [3, 1, 4, 1, 5] - la lista original no se modifica
Q2: ¿Cómo ordenar en orden descendente?
A:sort()
método o sorted()
función con reverse=True
para ordenar en orden descendente. Ejemplo
numbers = [3, 1, 4, 1, 5]
# sort() para ordenar en orden descendente
numbers.sort(reverse=True)
print(numbers) # [5, 4, 3, 1, 1]
# sorted() para ordenar en orden descendente
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [5, 4, 3, 1, 1]
Q3: ¿Qué es una ordenación personalizada? ¿Cómo se usa?
A:Una ordenación personalizada es un método para definir tú mismo el criterio de ordenación. key
argumento se usa para especificar una función o una expresión lambda
. Por ejemplo, puedes ordenar por la longitud de una cadena o por una clave específica de un diccionario. Ejemplo: ordenar por la longitud de la cadena
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words) # ['date', 'apple', 'banana', 'cherry']
Q4: ¿Qué algoritmo de ordenación usa Python?
A:En Python se utiliza el algoritmo de ordenación TimSort (TimSort). Es una combinación de merge sort y insertion sort, y es eficiente para datos parcialmente ordenados.
Q5: ¿Hay formas de abordar la lentitud en la ordenación?
A:Cuando la lista tiene un número muy grande de elementos o se realiza una ordenación personalizada compleja, la velocidad de procesamiento puede disminuir. Se pueden mejorar con los siguientes métodos.
- Limitar la ordenación al mínimo necesario Evita ordenaciones innecesarias y procura ordenar solo una parte de los datos.
heapq
módulo Si utilizas el móduloheapq
de la biblioteca estándar de Python, puedes realizar ordenaciones parciales (p. ej., obtener los N primeros) de manera eficiente.
Ejemplo: obtener los 3 valores superiores
import heapq
numbers = [5, 1, 8, 3, 2, 9]
top3 = heapq.nlargest(3, numbers)
print(top3) # [9, 8, 5]