sort() vs sorted() en Python: diferencias y ejemplos

Actualizado el: 11/07/2026
Tempo de leitura: 3 minutos
Pessoa usando tablet com caneta digital para planejar tarefas em checklist, representando organização, planejamento e produtividade digital.

Ordenar datos es una tarea frecuente en listas de nombres, precios, fechas, puntuaciones y registros. Python ofrece dos herramientas principales: el método list.sort() y la función integrada sorted(). Ambos pueden producir el mismo orden, pero no se comportan igual.

En esta guía aprenderás la diferencia entre sort() y sorted() en Python, cuándo usar cada opción, cómo ordenar de forma descendente, aplicar claves personalizadas, combinar varios criterios y evitar errores relacionados con la modificación de listas.

Diferencia principal

sort() modifica la lista original y devuelve None. sorted() crea una lista nueva y acepta cualquier iterable.

numeros = [8, 3, 10, 1]

resultado = numeros.sort()

print(numeros)    # [1, 3, 8, 10]
print(resultado)  # None
numeros = [8, 3, 10, 1]
ordenados = sorted(numeros)

print(numeros)    # [8, 3, 10, 1]
print(ordenados)  # [1, 3, 8, 10]

Antes de continuar, conviene dominar las operaciones básicas explicadas en la guía de listas en Python.

Cuándo usar sort()

Utiliza sort() cuando ya tienes una lista, quieres modificarla de forma intencional y no necesitas conservar el orden anterior.

tareas = ["revisar", "publicar", "escribir"]
tareas.sort()

for tarea in tareas:
    print(tarea)

La modificación en el lugar evita crear otra lista completa. Sin embargo, cualquier parte del programa que comparta la misma referencia verá el nuevo orden.

Cuándo usar sorted()

Utiliza sorted() cuando quieras preservar el original, trabajar con una tupla, un conjunto, un diccionario o un generador, o producir directamente una lista nueva.

coordenadas = (4, 1, 9, 2)
ordenadas = sorted(coordenadas)

print(coordenadas)
print(ordenadas)

El resultado de sorted() siempre es una lista, aunque la entrada sea otro tipo de iterable.

Orden descendente

Ambas herramientas aceptan reverse=True.

puntuaciones = [72, 95, 88, 61]
puntuaciones.sort(reverse=True)
print(puntuaciones)
precios = (29.90, 10.50, 75.00)
mayor_a_menor = sorted(precios, reverse=True)
print(mayor_a_menor)

Ordenar texto sin distinguir mayúsculas

nombres = ["ana", "Carlos", "beatriz", "Álvaro"]
ordenados = sorted(nombres, key=str.casefold)
print(ordenados)

key recibe una función que calcula el valor utilizado para ordenar. Los elementos originales permanecen intactos. La guía de funciones en Python ayuda a comprender por qué podemos pasar una función como argumento.

Ordenar por longitud

palabras = ["api", "programación", "python", "web"]
por_longitud = sorted(palabras, key=len)
print(por_longitud)

Cuando dos elementos tienen la misma clave, Python mantiene su orden relativo original. Esta propiedad se conoce como ordenación estable.

Ordenar diccionarios por un campo

productos = [
    {"nombre": "Teclado", "precio": 49.90},
    {"nombre": "Ratón", "precio": 24.50},
    {"nombre": "Monitor", "precio": 219.00},
]

por_precio = sorted(
    productos,
    key=lambda producto: producto["precio"],
)

for producto in por_precio:
    print(producto["nombre"], producto["precio"])

Los registros del ejemplo utilizan las estructuras explicadas en la guía de diccionarios en Python. Una función lambda es adecuada cuando la clave es breve; para lógica compleja, una función con nombre suele ser más clara.

Usar itemgetter y attrgetter

from operator import itemgetter

usuarios = [
    {"nombre": "Marta", "edad": 34},
    {"nombre": "Luis", "edad": 25},
    {"nombre": "Ana", "edad": 29},
]

usuarios_ordenados = sorted(
    usuarios,
    key=itemgetter("edad"),
)

itemgetter() evita una lambda cuando solo necesitas extraer una clave. Para objetos, attrgetter() cumple un papel similar con atributos.

Ordenar por varios criterios

Una tupla como clave permite definir prioridades.

personas = [
    {"ciudad": "Lima", "nombre": "Sofía"},
    {"ciudad": "Quito", "nombre": "Ana"},
    {"ciudad": "Lima", "nombre": "Carlos"},
]

resultado = sorted(
    personas,
    key=lambda persona: (
        persona["ciudad"].casefold(),
        persona["nombre"].casefold(),
    ),
)

Combinar ascendente y descendente

resultados = [
    {"equipo": "A", "puntos": 20, "faltas": 3},
    {"equipo": "B", "puntos": 25, "faltas": 7},
    {"equipo": "C", "puntos": 25, "faltas": 2},
]

clasificacion = sorted(
    resultados,
    key=lambda fila: (-fila["puntos"], fila["faltas"]),
)

Los puntos se niegan para que los valores mayores aparezcan primero, mientras las faltas permanecen ascendentes.

Ordenar fechas correctamente

Las fechas deben convertirse a objetos date o datetime cuando el formato textual no garantiza un orden cronológico.

from datetime import datetime

fechas = ["20/07/2026", "01/06/2026", "15/07/2026"]

ordenadas = sorted(
    fechas,
    key=lambda texto: datetime.strptime(texto, "%d/%m/%Y"),
)

Consulta la guía de datetime en Python para aprender a analizar y comparar fechas.

Ordenar valores con None

Python no compara directamente None con números. Define una regla explícita.

valores = [10, None, 3, None, 8]

ordenados = sorted(
    valores,
    key=lambda valor: (
        valor is None,
        valor if valor is not None else 0,
    ),
)

La guía sobre None en Python explica por qué representa ausencia y no equivale a cero o una cadena vacía.

Error frecuente: guardar el resultado de sort()

numeros = [3, 1, 2]
ordenados = numeros.sort()

print(ordenados)  # None

Usa numeros.sort() y después trabaja con la misma lista, o asigna sorted(numeros) a una variable nueva.

Rendimiento y memoria

sort() reutiliza la lista existente, mientras sorted() crea una lista nueva. Ambos emplean una ordenación estable y funcionan especialmente bien con datos parcialmente ordenados. Elige primero según la semántica: modificar el original o producir un resultado independiente.

Conclusión

Utiliza sort() cuando quieras modificar una lista de forma explícita. Utiliza sorted() cuando necesites preservar el original o trabajar con otro iterable. Para criterios personalizados, define key, usa tuplas para varias prioridades y aprovecha la estabilidad del algoritmo.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Leitura e escrita de arquivos CSV em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Archivos CSV en Python: leer, escribir y procesar

    Aprende a leer, escribir, filtrar y validar archivos CSV en Python con reader, writer, DictReader, DictWriter, UTF-8 y streaming.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Fatiamento de listas (slicing) em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Slicing en Python: guía completa con ejemplos

    Domina el slicing en Python con start, stop, step, índices negativos, copias, reemplazos, eliminación, inversión y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Leitura e escrita de arquivos TXT usando Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Cómo leer y escribir archivos de texto en Python

    Aprende a leer, escribir, añadir y procesar archivos de texto en Python con UTF-8, with, pathlib y manejo seguro de

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Uso da função enumerate em loops Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    enumerate() en Python: bucles con índices

    Aprende enumerate() en Python para recorrer valores con índices, elegir el inicio, combinarlo con zip, procesar archivos y evitar contadores

    Ler mais

    Tempo de leitura: 3 minutos
    11/07/2026
    Ilustração minimalista de testes automatizados com Pytest em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Pytest en Python: guía completa para principiantes

    Aprende Pytest en Python desde cero: instalación, assert, excepciones, organización, comandos útiles y buenas prácticas para principiantes.

    Ler mais

    Tempo de leitura: 9 minutos
    11/07/2026
    Criação de chatbot com API da OpenAI usando Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Cómo crear un chatbot con OpenAI y Python

    Crea un chatbot con OpenAI y Python usando la Responses API, variables de entorno, memoria conversacional y manejo de errores.

    Ler mais

    Tempo de leitura: 7 minutos
    10/07/2026