Domine Listas em Python: sort() vs sorted() – Guia Completo!

Este artigo explora as diferentes formas de organizar listas em Python.

Em Python, a organização de listas pode ser alcançada através do método sort(), que modifica a lista original, ou pela função integrada sorted(), que gera uma nova lista ordenada.

Neste guia, você aprenderá sobre:

  • A sintaxe do método sort() e da função sorted().
  • Exemplos de código para ordenar listas de forma crescente e decrescente.
  • Como personalizar a ordenação utilizando o parâmetro key.
  • As diferenças cruciais entre sort() e sorted().

Vamos começar! 🚀

Entendendo a Sintaxe do Método sort() em Python

O método sort() é aplicado diretamente em uma lista Python, reorganizando seus elementos na ordem especificada, alterando a lista original.

A estrutura do método sort() em Python é:

<lista>.sort(reverse = True | False, key = <função>)

Analisando a estrutura:

  • <lista>: Representa qualquer objeto de lista válido em Python.
  • reverse: Parâmetro opcional, aceitando True ou False. O padrão é False, para ordem crescente. Use True para ordem decrescente.
  • key: Parâmetro opcional que recebe uma função (<função>). Essa função pode ser interna ou definida pelo usuário.

Na próxima seção, vamos explorar exemplos práticos.

Ordenando uma Lista Python em Ordem Crescente

Para listas numéricas, o método sort() é utilizado para organização crescente.

▶ Observe o seguinte código:

numeros = [25, 13, 6, 17, 9]
numeros.sort()
print(numeros)

# Saída: [6, 9, 13, 17, 25]

A lista foi organizada em ordem crescente, com a lista original sendo modificada. Este processo é conhecido como ordenação “in-place”.

Organizando Listas Python em Ordem Decrescente

Para organizar listas em ordem decrescente, configure o parâmetro reverse para True:

numeros = [25, 13, 6, 17, 9]
numeros.sort(reverse=True)
print(numeros)

# Saída: [25, 17, 13, 9, 6]

A lista agora está organizada em ordem decrescente.

Personalizando a Ordenação com o Parâmetro key

Aqui, usaremos o parâmetro key para personalizar a forma de organização dos itens.

A função mod5(), abaixo, retorna o resto da divisão de um número por 5:

def mod5(x):
  return x % 5

Essa função será usada como chave.

Executando o código a seguir:

numeros = [25, 13, 6, 17, 9]
numeros.sort(key=mod5)
print(numeros)

# Saída: [25, 6, 17, 13, 9]

A ordenação agora é feita com base no resto da divisão por 5.

  • Números com menor resto aparecem primeiro.
  • Números com maior resto são os últimos.

Para verificar, observe o resto de cada número:

numeros = [25, 13, 6, 17, 9]

for num in numeros:
  print(f"{num} deixa resto {num%5} quando dividido por 5")

# Saída
25 deixa resto 0 quando dividido por 5
13 deixa resto 3 quando dividido por 5
6 deixa resto 1 quando dividido por 5
17 deixa resto 2 quando dividido por 5
9 deixa resto 4 quando dividido por 5

A ordenação reflete o resto da divisão por 5.

Em vez de uma função separada, podemos usar funções lambda, que são funções anônimas de uma linha em Python. lambda args : expressão retorna a expressão calculada com os argumentos fornecidos.

Reescrevendo a ordenação com uma expressão lambda:

numeros = [25, 13, 6, 17, 9]
numeros.sort(key=lambda x: x % 5)
print(numeros)

# Saída: [25, 6, 17, 13, 9]

Até agora, aprendemos a ordenar listas numéricas. Agora, vamos explorar a ordenação de listas de strings.

Ordenando Listas Python em Ordem Alfabética

Vamos usar exemplos inspirados em Harry Potter ✨ para ordenar uma lista de strings.

A lista estudantes representa alunos de Hogwarts que serão organizados em ordem alfabética por seus nomes.

A ordenação padrão de strings em Python é alfabética.

estudantes = ["Harry", "Ron", "Hermione", "Draco", "Cedric"]

Imprimindo a lista após a ordenação:

estudantes.sort()
print(estudantes)

# Saída
['Cedric', 'Draco', 'Harry', 'Hermione', 'Ron']

Ordenação Alfabética Reversa

Para organizar strings em ordem alfabética inversa, configuramos reverse = True:

estudantes.sort(reverse=True)
print(estudantes)

# Saída
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

A lista foi organizada na ordem inversa.

Personalizando a Ordenação com o Parâmetro key

Nesta seção, personalizamos a ordenação usando o parâmetro key.

Considere a seguinte lista, casas:

casas = [
            {1: "Draco", "house": "Slytherin"},
            {2: "Harry", "house": "Gryffindor"},
            {3: "Cedric", "house": "Hufflepuff"}
         ]

A lista casas é uma lista de dicionários, com pares chave-valor indicando o nome do aluno e sua respectiva casa.

A ordenação será feita alfabeticamente pelas casas dos alunos.

Definiremos o parâmetro key para a casa dos alunos.

Para obter a casa de cada aluno, usamos a função retornaCasa():

def retornaCasa(aluno):
  return aluno['house']

Essa função retorna a casa de cada aluno.

Agora, o método sort() pode ser chamado:

casas.sort(key=retornaCasa)

A lista é ordenada pela casa, e não pelo nome, resultando em Grifinória, Lufa-Lufa e Sonserina em ordem alfabética.

print(casas)

# Saída
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

Alternativamente, uma função lambda também pode ser usada. Esta função lambda retorna a casa para cada item da lista.

▶ Verifique:

casas.sort(key=lambda aluno: aluno["house"])
print(casas)

# Saída
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

Nos exemplos anteriores, o método sort() foi usado, alterando a lista original.

E se quisermos manter a lista original intacta, obtendo uma cópia ordenada?

A função sorted() resolve essa necessidade.

A Sintaxe da Função sorted() em Python

A função sorted() recebe uma lista ou coleção como argumento, retornando uma nova lista ordenada, sem alterar a lista original.

A sintaxe de sorted() em Python é:

<copia_ordenada> = sorted(<lista>, reverse = True | False, key = <função>)

Sua estrutura é muito similar à do método sort().

  • <lista>: Qualquer objeto de lista Python válido (obrigatório).
  • reverse e key são parâmetros opcionais.

Observação: Ao contrário do método sort(), que opera apenas em listas, a função sorted() é aplicável a qualquer iterável em Python, como listas, strings e dicionários.

Ordenando Listas com sorted()

#1. numeros é uma lista de números.

A função sorted() recebe numeros como argumento e o resultado é atribuído a numeros_ordenados1.

numeros = [25, 13, 6, 17, 9]
numeros_ordenados1 = sorted(numeros)
print(numeros_ordenados1)

# Saída: [6, 9, 13, 17, 25]

Os números foram organizados em ordem crescente por padrão.

A lista original numeros permanece inalterada:

print(numeros)
# Saída: [25, 13, 6, 17, 9]

#2. Configurando o parâmetro opcional reverse para True, obtemos numeros_ordenados2.

A nova lista, numeros_ordenados2, é organizada em ordem decrescente.

numeros_ordenados2 = sorted(numeros, reverse=True)
print(numeros_ordenados2)

# Saída: [25, 17, 13, 9, 6]

#3. Usando uma lista de strings.

A função sorted() retorna uma nova lista, com os itens em ordem alfabética.

frutas = ['peras', 'morango', 'maçã', 'abacaxi', 'mirtilo']
frutas_ordenadas1 = sorted(frutas)
print(frutas_ordenadas1)

# Saída:
['abacaxi', 'maçã', 'mirtilo', 'morango', 'peras']

#4. Personalizando a ordenação com o parâmetro key. Definindo a chave para len, a lista é organizada com base no comprimento das strings.

Observação: A função len() em Python aceita qualquer iterável e retorna seu comprimento.

As strings menores aparecem no início, e as maiores no final.

frutas = ['pera', 'morango', 'maçã', 'abacaxi', 'mirtilo']
frutas_ordenadas2 = sorted(frutas, key=len)
print(frutas_ordenadas2)

# Saída:
['pera', 'maçã', 'abacaxi', 'mirtilo', 'morango']

Na saída, “pera” é a menor string, e “morango” é a maior.

sort() vs sorted()

Vamos resumir as diferenças entre sort() e sorted().

Método .sort() Função sorted()
Organiza a lista original (in-place). Retorna uma nova lista ordenada.
Funciona apenas com listas Python. Funciona com iteráveis (listas, strings, coleções…).
Não retorna nada (None). Retorna uma cópia ordenada do iterável.

Conclusão 👩‍🏫

Espero que este guia de ordenação de listas em Python tenha sido útil.

Revisando:

  • lista.sort(reverse = True | False, key = <função>) para ordenar uma lista no lugar.
  • sorted(lista, reverse = True | False, key = <função>) para obter uma cópia ordenada da lista.

Com o conhecimento de ordenação de listas, explore também sobre listas de compreensão em Python. Ou ainda, aprenda a trabalhar com arquivos ou JSON em Python.

Experimente os exemplos usando o Compilador Python Online do etechpt.com.