Como Ordenar Listas no Python (Sort vs Sorted)

Atualizado em: 24/12/2025
Tempo de leitura: 12 minutos
Pessoa usando tablet com caneta digital para planejar tarefas em checklist, representando organização, planejamento e produtividade digital.

Você já ficou confuso sobre quando usar sort() ou sorted() para organizar suas listas em Python? Não está sozinho. Esses dois métodos de ordenação parecem fazer a mesma coisa, mas têm diferenças importantes que podem impactar seu código de formas significativas.

Neste guia completo, você aprenderá tudo sobre como ordenar listas no Python. Vamos explorar as diferenças cruciais entre sort() e sorted(), quando usar cada um, e como dominar técnicas avançadas de ordenação. Ao final, você saberá exatamente qual método escolher para cada situação.

O que é Ordenação de Listas no Python

Ordenar uma lista significa reorganizar seus elementos em uma sequência específica. O Python oferece duas formas principais de fazer isso: o método sort() e a função sorted(). Ambas organizam os elementos, mas de maneiras bem diferentes.

A ordenação é uma operação fundamental na programação. Você pode precisar ordenar números do menor para o maior, organizar nomes alfabeticamente ou classificar produtos por preço. O Python facilita todas essas tarefas com suas ferramentas integradas.

Antes de mergulharmos nas diferenças, é importante entender que o Python usa um algoritmo chamado Timsort para ordenação. Esse algoritmo é eficiente e estável, garantindo que elementos iguais mantenham sua ordem original.

Diferença Principal: Sort vs Sorted

A diferença fundamental entre esses dois métodos está em como eles lidam com a lista original. Vamos entender cada um deles.

O Método sort()

O sort() é um método que pertence às listas. Ele modifica a lista original diretamente, reorganizando seus elementos no lugar. Isso significa que sua lista original será alterada permanentemente. Além disso, o método não retorna nenhum valor (tecnicamente retorna None).

Python

# Exemplo básico com sort()
numeros = [5, 2, 8, 1, 9]
numeros.sort()
print(numeros)  # Saída: [1, 2, 5, 8, 9]
Pronto para executar

Veja que a lista numeros foi modificada. Os valores agora estão organizados em ordem crescente. Se você tentar atribuir o resultado a uma variável, receberá None.

A Função sorted()

Já o sorted() é uma função embutida do Python. Ela cria e retorna uma nova lista ordenada, deixando a lista original intacta. Você pode usar sorted() com qualquer objeto iterável, não apenas listas.

Python

# Exemplo básico com sorted()
numeros = [5, 2, 8, 1, 9]
numeros_ordenados = sorted(numeros)
print(numeros)  # Saída: [5, 2, 8, 1, 9]
print(numeros_ordenados)  # Saída: [1, 2, 5, 8, 9]
Pronto para executar

Observe como a lista original permanece inalterada. O sorted() criou uma cópia ordenada e a retornou. Essa é uma vantagem quando você precisa preservar os dados originais.

Quando Usar Sort ou Sorted

Escolher entre sort() e sorted() depende do que você precisa fazer com seus dados. Cada método tem suas situações ideais de uso.

Use sort() Quando

O método sort() é ideal para economizar memória. Como ele modifica a lista no lugar, não cria cópias adicionais. Use sort() quando você não precisa mais da ordem original dos dados e quer um código mais eficiente em termos de memória.

Por exemplo, se você está processando milhares de registros e só precisa da versão ordenada, sort() é a escolha certa. Também é útil quando você trabalha exclusivamente com listas em Python.

Python

# Bom uso do sort()
alunos = ["Maria", "João", "Ana", "Pedro"]
alunos.sort()
# Lista original não é mais necessária
print(alunos)  # ['Ana', 'João', 'Maria', 'Pedro']
Pronto para executar

Use sorted() Quando

O sorted() é mais versátil e seguro. Use quando você precisa manter a lista original intacta ou quando está trabalhando com outros tipos de iteráveis como tuplas, conjuntos ou strings.

A flexibilidade do sorted() permite que você trabalhe com qualquer sequência iterável. Isso o torna a escolha padrão para a maioria dos casos de uso.

Python

# Bom uso do sorted()
texto = "python"
letras_ordenadas = sorted(texto)
print(texto)  # 'python' (original intacto)
print(letras_ordenadas)  # ['h', 'n', 'o', 'p', 't', 'y']
Pronto para executar

Ordenação Crescente e Decrescente

Por padrão, tanto sort() quanto sorted() organizam elementos em ordem crescente. Mas e quando você quer a ordem inversa? Ambos os métodos aceitam o parâmetro reverse.

Ordem Crescente

A ordem crescente é o comportamento padrão. Para números, vai do menor para o maior. Para textos, segue a ordem alfabética.

Python

# Ordem crescente (padrão)
numeros = [10, 3, 7, 1]
numeros.sort()
print(numeros)  # [1, 3, 7, 10]

palavras = ["zebra", "cachorro", "abelha"]
ordenadas = sorted(palavras)
print(ordenadas)  # ['abelha', 'cachorro', 'zebra']
Pronto para executar

Ordem Decrescente

Para inverter a ordem, use o parâmetro reverse=True. Isso funciona tanto com sort() quanto com sorted().

Python

# Ordem decrescente
numeros = [10, 3, 7, 1]
numeros.sort(reverse=True)
print(numeros)  # [10, 7, 3, 1]

palavras = ["zebra", "cachorro", "abelha"]
ordenadas = sorted(palavras, reverse=True)
print(ordenadas)  # ['zebra', 'cachorro', 'abelha']
Pronto para executar

O parâmetro reverse é simples mas poderoso. Ele inverte completamente a lógica de ordenação sem exigir código adicional.

Ordenação Personalizada com o Parâmetro Key

O parâmetro key permite criar ordenações personalizadas. Você passa uma função que determina como comparar os elementos. Essa é uma das características mais poderosas da ordenação em Python.

Ordenando por Comprimento

Um exemplo comum é ordenar strings pelo seu tamanho. Use a função len como valor para key.

Python

# Ordenar palavras por tamanho
palavras = ["Python", "é", "incrível", "demais"]
palavras.sort(key=len)
print(palavras)  # ['é', 'Python', 'demais', 'incrível']
Pronto para executar

Cada palavra é comparada pelo seu comprimento. A palavra "é" tem 1 caractere, então vem primeiro. "Python" tem 6, e assim por diante.

Ordenando com Lambda

Você pode usar funções lambda para criar critérios de ordenação mais complexos. Isso é útil quando você precisa de lógica específica.

Python

# Ordenar tuplas pelo segundo elemento
alunos = [("Ana", 8.5), ("João", 7.0), ("Maria", 9.0)]
alunos.sort(key=lambda x: x[1])
print(alunos)  
# [('João', 7.0), ('Ana', 8.5), ('Maria', 9.0)]
Pronto para executar

A lambda pega cada tupla e retorna o segundo elemento (a nota). O Python então usa essas notas para ordenar a lista.

Ignorando Maiúsculas e Minúsculas

Por padrão, o Python diferencia maiúsculas de minúsculas ao ordenar. Letras maiúsculas vêm antes das minúsculas. Para ignorar essa diferença, use str.lower ou str.casefold como key.

Python

# Ordenação sem considerar maiúsculas
nomes = ["ana", "Zoe", "Bruno", "amanda"]
nomes.sort(key=str.lower)
print(nomes)  # ['amanda', 'ana', 'Bruno', 'Zoe']
Pronto para executar

Ordenando Diferentes Tipos de Dados

O Python permite ordenar diversos tipos de dados. Cada tipo tem suas particularidades na ordenação.

Ordenando Números

Números inteiros e float seguem a ordem numérica natural. O Python lida com ambos os tipos sem problemas.

Python

# Misturando inteiros e floats
valores = [3.5, 1, 2.7, 5, 1.2]
valores.sort()
print(valores)  # [1, 1.2, 2.7, 3.5, 5]
Pronto para executar

Ordenando Strings

As strings são ordenadas alfabeticamente, caractere por caractere. O Python usa a tabela Unicode para determinar a ordem.

Python

# Ordenação alfabética
frutas = ["maçã", "banana", "abacaxi", "uva"]
frutas.sort()
print(frutas)  # ['abacaxi', 'banana', 'maçã', 'uva']
Pronto para executar

Ordenando Dicionários

Você não pode ordenar um dicionário diretamente, mas pode ordenar suas chaves ou valores. Use sorted() com métodos do dicionário.

Python

# Ordenar dicionário por chaves
precos = {"maçã": 3.50, "banana": 2.00, "laranja": 4.20}
chaves_ordenadas = sorted(precos.keys())
print(chaves_ordenadas)  # ['banana', 'laranja', 'maçã']

# Ordenar por valores
por_preco = sorted(precos.items(), key=lambda x: x[1])
print(por_preco)  
# [('banana', 2.0), ('maçã', 3.5), ('laranja', 4.2)]
Pronto para executar

Ordenação Estável no Python

O Python garante que a ordenação seja estável. Isso significa que quando dois elementos são iguais, eles mantêm sua posição relativa original. Essa característica é importante para ordenações múltiplas.

Por exemplo, se você tem uma lista de estudantes já ordenada por nome e depois ordena por nota, estudantes com a mesma nota manterão sua ordem alfabética.

Python

# Demonstração de ordenação estável
dados = [("Ana", 8), ("Bruno", 8), ("Carlos", 7)]
dados.sort(key=lambda x: x[1])
print(dados)
# [('Carlos', 7), ('Ana', 8), ('Bruno', 8)]
# Ana vem antes de Bruno porque já estava antes
Pronto para executar

A estabilidade permite criar ordenações complexas aplicando múltiplos critérios sequencialmente. Você pode ordenar primeiro por um critério secundário e depois pelo principal.

Erros Comuns ao Ordenar Listas

Mesmo programadores experientes cometem erros ao ordenar listas. Conhecer esses problemas ajuda a evitá-los.

Tentar Atribuir o Resultado de sort()

Um erro comum é tentar atribuir o resultado de sort() a uma variável. Como sort() retorna None, você perde sua lista.

Python

# ERRADO
numeros = [3, 1, 2]
ordenados = numeros.sort()  # ordenados = None
print(ordenados)  # None

# CORRETO
numeros = [3, 1, 2]
numeros.sort()  # Modifica numeros
print(numeros)  # [1, 2, 3]
Pronto para executar

Misturar Tipos Incompatíveis

O Python não pode comparar tipos completamente diferentes. Tentar ordenar uma lista com strings e números gerará erro.

Python

# Isso gera erro
misturado = [1, "dois", 3, "quatro"]
# misturado.sort()  # TypeError!
Pronto para executar

Modificar Lista Durante Iteração

Nunca modifique uma lista enquanto itera sobre ela. Isso pode causar comportamentos inesperados. Se precisar ordenar durante um loop, use sorted() para criar uma cópia.

Performance: Sort vs Sorted

Em termos de velocidade, sort() é ligeiramente mais rápido que sorted(). A diferença está no fato de que sorted() precisa criar uma nova lista. Para listas pequenas, a diferença é imperceptível.

Ambos os métodos têm complexidade O(n log n), onde n é o número de elementos. Isso significa que são eficientes mesmo para listas grandes. O algoritmo Timsort usado pelo Python é otimizado para dados do mundo real.

No entanto, o sort() usa menos memória porque modifica a lista no lugar. Se você trabalha com milhões de registros, essa economia pode ser significativa.

Exemplos Práticos de Ordenação

Vamos ver alguns exemplos do mundo real que mostram o poder da ordenação em Python.

Ordenar Produtos por Preço

Python

# Lista de produtos (nome, preço)
produtos = [
    ("Notebook", 2500.00),
    ("Mouse", 50.00),
    ("Teclado", 150.00),
    ("Monitor", 800.00)
]

# Do mais barato ao mais caro
produtos.sort(key=lambda x: x[1])
print("Mais baratos primeiro:")
for nome, preco in produtos:
    print(f"{nome}: R$ {preco:.2f}")
Pronto para executar

Organizar Datas

Python
# Usando o módulo datetime
from datetime import datetime

eventos = [
    ("Reunião", "2024-03-15"),
    ("Apresentação", "2024-02-10"),
    ("Workshop", "2024-04-22")
]

# Ordenar por data
eventos.sort(key=lambda x: datetime.strptime(x[1], "%Y-%m-%d"))
print("Eventos cronológicos:")
for evento, data in eventos:
    print(f"{evento}: {data}")

Top 5 Maiores Valores

# Encontrar os 5 maiores valores
vendas = [120, 450, 230, 890, 340, 670, 180, 560]
top_5 = sorted(vendas, reverse=True)[:5]
print(f"Top 5 vendas: {top_5}")

Ordenação com Múltiplos Critérios

Às vezes você precisa ordenar por mais de um critério. Por exemplo, ordenar estudantes primeiro por nota e depois por nome. O Python facilita isso usando tuplas no key.

Python

# Ordenar por múltiplos critérios
alunos = [
    ("Carlos", 8.5, 20),
    ("Ana", 9.0, 19),
    ("Bruno", 8.5, 21),
    ("Diana", 9.0, 18)
]

# Ordenar por nota (decrescente) e depois por idade (crescente)
alunos.sort(key=lambda x: (-x[1], x[2]))
print("Ordenados por nota e idade:")
for nome, nota, idade in alunos:
    print(f"{nome}: {nota} ({idade} anos)")
Pronto para executar

O truque aqui é usar uma tupla no retorno da lambda. O Python compara primeiro o primeiro elemento, depois o segundo, e assim por diante. Usar o sinal negativo inverte a ordem para aquele critério específico.

Alternativas à Ordenação

Nem sempre ordenar é a melhor solução. O Python oferece outras ferramentas que podem ser mais eficientes dependendo do caso.

Função min() e max()

Se você só precisa do menor ou maior elemento, use as funções built-in min() e max(). São muito mais rápidas que ordenar toda a lista.

Python

# Mais eficiente para encontrar extremos
numeros = [45, 12, 78, 23, 90, 34]
menor = min(numeros)
maior = max(numeros)
print(f"Menor: {menor}, Maior: {maior}")
Pronto para executar

Módulo heapq

Para encontrar os N menores ou maiores elementos, o módulo heapq é mais eficiente que ordenar e fatiar.

Python
import heapq

numeros = [45, 12, 78, 23, 90, 34, 67, 56]
tres_menores = heapq.nsmallest(3, numeros)
tres_maiores = heapq.nlargest(3, numeros)
print(f"3 menores: {tres_menores}")
print(f"3 maiores: {tres_maiores}")

Boas Práticas ao Ordenar Listas

Seguir boas práticas torna seu código mais legível e eficiente. Aqui estão algumas recomendações importantes.

Prefira sorted() por padrão. É mais seguro e versátil. Use sort() apenas quando a eficiência de memória for crítica e você não precisa da lista original.

Use funções nomeadas para keys complexas. Em vez de lambdas longas, crie funções com nomes descritivos. Isso melhora a legibilidade.

Python

# Menos legível
alunos.sort(key=lambda x: (x[1], x[0].lower()))

# Mais legível
def criterio_ordenacao(aluno):
    return (aluno[1], aluno[0].lower())

alunos.sort(key=criterio_ordenacao)
Pronto para executar

Documente critérios de ordenação não óbvios. Use comentários para explicar lógicas complexas de ordenação. Isso ajuda outros desenvolvedores (e você no futuro) a entender o código.

Perguntas Frequentes (FAQ)

1. Qual é a diferença entre sort() e sorted() em Python?

O sort() modifica a lista original e não retorna valor. Já o sorted() cria uma nova lista ordenada e mantém a original intacta.

2. Posso usar sorted() com tuplas e conjuntos?

Sim, sorted() funciona com qualquer iterável incluindo tuplas, conjuntos e strings. Ele sempre retorna uma lista ordenada.

3. Como ordenar uma lista em ordem decrescente?

Use o parâmetro reverse=True em sort() ou sorted(). Exemplo: lista.sort(reverse=True) ou sorted(lista, reverse=True).

4. O que é o parâmetro key na ordenação?

O parâmetro key aceita uma função que define como comparar elementos. Permite ordenações personalizadas como por tamanho ou atributo específico.

5. Como ordenar strings ignorando maiúsculas e minúsculas?

Use key=str.lower ou key=str.casefold na ordenação. Exemplo: lista.sort(key=str.lower).

6. Posso ordenar uma lista com diferentes tipos de dados?

Não diretamente. O Python não pode comparar tipos incompatíveis como strings e números. Você precisa converter ou usar key.

7. O que significa ordenação estável?

Ordenação estável mantém a posição relativa de elementos iguais. Se dois elementos têm o mesmo valor, a ordem original entre eles é preservada.

8. Qual método é mais rápido, sort() ou sorted()?

O sort() é ligeiramente mais rápido pois modifica no lugar. Mas para a maioria dos casos, a diferença é imperceptível.

9. Como ordenar uma lista de dicionários?

Use o parâmetro key com uma lambda ou função que acessa a chave desejada. Exemplo: sorted(lista, key=lambda x: x['nome']).

10. Posso desfazer uma ordenação?

Se usou sort(), não há como recuperar a ordem original. Por isso, se precisar manter a ordem original, use sorted() ou faça uma cópia antes.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Fundamentos
    Foto do Leandro Hirt

    Descubra como map e filter agilizam seu código Python

    Se você já escreve scripts e aplicações, sabe que processar grandes volumes de dados pode ser um desafio para a

    Ler mais

    Tempo de leitura: 10 minutos
    09/03/2026
    Fundamentos
    Foto do Leandro Hirt

    List comprehension vs generator expression: qual usar?

    No vasto ecossistema da programação, entender as nuances entre diferentes formas de processar dados é o que separa um iniciante

    Ler mais

    Tempo de leitura: 10 minutos
    07/03/2026
    FundamentosBibliotecas e Módulos
    Foto do Leandro Hirt

    Descubra como gerar números aleatórios seguros com secrets

    Você já parou para pensar como o seu computador decide qual será o próximo número em um sorteio? No mundo

    Ler mais

    Tempo de leitura: 9 minutos
    27/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o operador walrus (:=) no Python

    O ecossistema do Python é conhecido por sua simplicidade e legibilidade, mas isso não significa que a linguagem pare de

    Ler mais

    Tempo de leitura: 9 minutos
    18/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Como usar zip em Python: guia para iniciantes

    A função zip() é uma das ferramentas mais úteis e, ao mesmo tempo, subestimadas para quem está começando a aprender

    Ler mais

    Tempo de leitura: 9 minutos
    16/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Como usar o with para abrir arquivos em Python

    Aprender a manipular dados externos é um marco fundamental para qualquer programador iniciante, e saber como usar o with para

    Ler mais

    Tempo de leitura: 9 minutos
    12/02/2026