Como Ordenar uma String em Python
Como usar sorted() e .sort() em Python
por David Fundakowski
Todos os programadores terão que escrever código para classificar itens ou dados em algum momento. A ordenação pode ser fundamental para a experiência do usuário em seu aplicativo, seja para ordenar a atividade mais recente de um usuário por data e hora, ou para colocar uma lista de destinatários de e-mail em ordem alfabética por sobrenome. A funcionalidade de ordenação do Python oferece recursos robustos para realizar a ordenação básica ou personalizar a ordem em um nível granular.
Neste guia, você aprenderá como classificar vários tipos de dados em diferentes estruturas de dados, personalizar a ordem e trabalhar com dois métodos diferentes de ordenação em Python.
Até o final deste tutorial, você saberá como:
- Implementar a ordenação básica do Python em estruturas de dados
- Diferenciar entre
sorted()
e.sort()
- Personalizar uma ordem de classificação complexa em seu código com base em requisitos exclusivos
Para este tutorial, você precisará de uma compreensão básica de listas e tuplas, assim como de conjuntos. Essas estruturas de dados serão usadas neste tutorial e algumas operações básicas serão realizadas nelas. Além disso, este tutorial utiliza o Python 3, portanto, a saída de exemplo pode variar ligeiramente se você estiver usando o Python 2.
Ordenando Valores com sorted()
Para começar com a ordenação em Python, primeiro você vai aprender como ordenar dados numéricos e dados de string.
Ordenando Números
Você pode usar o Python para classificar uma lista usando o sorted()
. Neste exemplo, uma lista de inteiros é definida e, em seguida, o sorted()
é chamado com a variável numbers
como argumento:
A saída deste código é uma nova lista ordenada. Quando a variável original é impressa, os valores iniciais não são alterados.
Este exemplo mostra quatro características importantes do sorted()
:
- A função
sorted()
não precisou ser definida. É uma função integrada que está disponível em uma instalação padrão do Python. sorted()
, sem argumentos ou parâmetros adicionais, está ordenando os valores emnumbers
em ordem crescente, ou seja, do menor para o maior.- A variável original
numbers
não é alterada porque osorted()
fornece a saída ordenada sem alterar o valor original. - Quando o
sorted()
é chamado, ele fornece uma lista ordenada como valor de retorno.
Isso significa que o sorted()
pode ser usado em uma lista, e a saída pode ser atribuída imediatamente a uma variável:
Ordenando Strings
Assim como os números, as strings também podem ser ordenadas usando o sorted()
. Neste exemplo, uma lista de strings é definida e sorted()
é chamado com a variável fruits
como argumento:
A saída deste código é uma nova lista ordenada de strings. Da mesma forma que acontece com os números, a variável original fruits
não é alterada.
Quando as strings são ordenadas, a ordem segue a ordem alfabética padrão. As letras maiúsculas e minúsculas são levadas em consideração ao comparar as strings. Portanto, ‘apple’ vem antes de ‘banana’ porque ‘a’ vem antes de ‘b’ na ordem alfabética.
Limitações e Dificuldades com a Ordenação em Python
Embora a ordenação em Python seja poderosa e flexível, há algumas limitações e dificuldades que você precisa estar ciente. Vamos abordar duas delas:
Listas com tipos de dados não comparáveis não podem ser ordenadas
Quando você está usando o sorted()
ou o .sort()
em uma lista, os elementos da lista devem ser comparáveis entre si. Isso significa que se a lista contiver tipos de dados que não podem ser comparados, como strings e números misturados, você não poderá usar a ordenação diretamente.
Por exemplo, suponha que você tenha a seguinte lista:
Neste caso, ocorre um erro de tipo porque sorted()
espera que todos os elementos da lista sejam do mesmo tipo ou de tipos comparáveis. Como não é possível comparar diretamente uma string com um inteiro, você obtém um TypeError
.
Para contornar esse problema, você pode usar a função sorted()
com um argumento adicional chamado key
. O key
aceita uma função de comparação personalizada como argumento, que será usada para comparar os elementos da lista. Por exemplo, se você deseja classificar a lista acima considerando apenas os elementos de string, você pode usar o seguinte código:
A ordem é sensível a maiúsculas e minúsculas ao ordenar strings
Ao ordenar strings, uma coisa importante a se observar é que a ordem é sensível a maiúsculas e minúsculas. Isso significa que as letras maiúsculas vêm antes das letras minúsculas na ordem alfabética. Por exemplo:
Observe que ‘Apple’ vem antes de ‘Grape’ porque a letra ‘A’ tem um valor de código Unicode menor do que ‘G’. Portanto, a ordem das palavras é diferente da ordem alfabética esperada.
Se você quiser fazer uma ordenação sem diferenciação entre maiúsculas e minúsculas, você pode usar a função key
no sorted()
para realizar uma ordenação personalizada. Neste caso, você pode usar a função str.lower
como argumento de key
para fazer a comparação ignorar as diferenças entre maiúsculas e minúsculas:
Neste exemplo, a função str.lower
é usada como argumento para key
. Ela converte todas as letras da string em minúsculas antes de fazer a comparação, resultando em uma ordenação sem diferenciação entre maiúsculas e minúsculas.
Usando sorted() com o argumento reverse
Uma funcionalidade poderosa do sorted()
é a capacidade de inverter a ordem dos elementos usando o argumento reverse
. Por padrão, reverse
é definido como False
, o que significa que os elementos serão ordenados em ordem crescente. No entanto, se você definir reverse
como True
, os elementos serão ordenados em ordem decrescente.
Vamos dar uma olhada em um exemplo:
Aqui, ao definir reverse
como True
, a lista numbers
é ordenada em ordem decrescente.
Usando sorted() com o argumento key
Além da funcionalidade de classificação inversa, o sorted()
também permite personalizar a ordem de classificação com o argumento key
. O key
aceita uma função como argumento, que será usada para extrair um valor-chave dos elementos da lista. Em seguida, os elementos da lista serão ordenados com base nesses valores-chave.
Vamos ver um exemplo para entender melhor:
Neste exemplo, a função str.lower
é usada como argumento para key
. Ela extrai um valor-chave convertendo todas as letras da string em minúsculas. Portanto, a ordem de classificação é baseada nas versões em minúsculas dos nomes dos alunos, resultando em uma ordenação sem diferenciação entre maiúsculas e minúsculas.
Você também pode usar funções personalizadas como argumento de key
. Por exemplo, se você quiser ordenar os alunos pelo comprimento de seus nomes, você pode criar uma função que retorne o comprimento de uma string e usá-la como argumento de key
:
Neste exemplo, a função len
é usada como argumento para key
. Ela retorna o comprimento de uma string. Portanto, a ordem de classificação é baseada no comprimento dos nomes dos alunos, resultando em uma ordenação crescente com base no comprimento dos nomes.
Ordenando Valores com .sort()
Além da função sorted()
, o Python também fornece um método de lista chamado .sort()
, que é semelhante à função sorted()
, mas ordena a lista diretamente, em vez de retornar uma nova lista classificada.
Vamos ver um exemplo:
Neste exemplo, o método .sort()
é usado em vez da função sorted()
. O .sort()
é chamado diretamente na lista numbers
, que é alterada em seu lugar para ficar em ordem crescente.
É importante notar que o método .sort()
não retorna uma nova lista. Em vez disso, ele ordena a lista atual em seu lugar. Portanto, ao usar o método .sort()
, você não precisa atribuí-lo a uma variável como no exemplo do sorted()
.
Quando usar sorted() e quando usar .sort()
Agora que você conhece tanto a função sorted()
quanto o método .sort()
, você pode estar se perguntando qual deles deve usar em suas situações específicas.
Aqui estão algumas orientações:
- Use a função
sorted()
quando quiser obter uma nova lista classificada sem alterar a lista original. - Use o método
.sort()
quando quiser classificar a lista original em seu lugar sem criar uma nova lista.
Basicamente, a escolha entre sorted()
e .sort()
depende de se você precisa preservar a lista original ou se pode modificá-la diretamente.
Conclusão
A ordenação é uma tarefa fundamental em qualquer aplicativo de programação. O Python oferece a função sorted()
e o método .sort()
para ajudar na ordenação de listas e outros tipos de dados. Com o sorted()
, você pode obter uma nova lista classificada sem alterar a lista original, enquanto o .sort()
permite classificar a lista original diretamente. Além disso, você pode personalizar a ordenação usando os argumentos key
e reverse
no sorted()
. Ao entender esses conceitos, você estará preparado para realizar a ordenação em Python de forma eficaz e personalizada em suas aplicações.