Ordenar elementos em Python

Amanda Iglesias Moreno em Level Up Your Code Seguir 7 de jul · 5 min ler

Contêineres são objetos que contêm outros objetos. List, tuplas ou conjuntos são exemplos de contêineres internos no Python. Esses contêineres podem conter outros contêineres (lista aninhada) ou outros objetos (sequências, inteiros ou flutuantes). O módulo de coleta fornece outras alternativas para contêineres internos que podem ser muito úteis ao programar em Python.

Há dois aspectos-chave dos contêineres (e objetos em geral) a ter sempre em mente: mutabilidade e ordem . Mutabilidade refere-se à possibilidade de alterar os valores de um objeto. Objetos mutáveis podem alterar seus valores, enquanto objetos imutáveis não podem ser alterados. Por exemplo, podemos modificar o primeiro elemento de uma lista, atribuindo um novo valor, mas se tentarmos fazer o mesmo com uma tupla, obteremos um typeError, já que as tuplas são imutáveis; seus valores não podem ser modificados. Da mesma forma, obtemos um erro ao tentar modificar um caractere de uma string e o que isso significa? Isso significa que as strings são imutáveis também. ?

O segundo aspecto a considerar é a ordem . Objetos podem ser ordenados (ordem definida), ou seqüência não ordenada de elementos (ordem indefinida) onde nós nos importamos apenas se o objeto contém o elemento, mas não a sua posição. Objetos pedidos podem ser indexados e fatiados; por exemplo, podemos acessar um elemento de uma lista ou tupla por sua posição. Da mesma forma, podemos obter um caractere (ou múltiplos) de uma string fornecendo sua posição (lembre-se que os índices em Python começam com 0). Pelo contrário, se tentarmos acessar um elemento de um conjunto, obtemos uma exceção TypeError, já que os elementos não têm uma posição específica dentro de um conjunto.

Neste ponto, talvez você esteja se perguntando por que essa explicação antes de começar a abordar como classificar elementos no Python ?. A realidade é que a mutabilidade e a ordem são dois aspectos-chave para entender corretamente como podemos classificar os elementos de diferentes contêineres. Agora vamos começar! ?

Classificar elementos em uma lista

A função classificada

Uma lista é uma sequência ordenada mutável de elementos. Para classificar elementos de uma lista, podemos usar tanto a função classificada quanto o método de classificação . A função classificada retorna uma lista classificada, mas a lista fornecida para essa função permanece a mesma.

A função classificada possui a seguinte sintaxe:

classificado (iterável [, chave] [, reverso])

O primeiro parâmetro é o iterável que queremos classificar (neste caso, uma lista). Como veremos mais adiante, podemos usar outros iteráveis, como tuplas, dicionários ou coleções com a função classificada. Os dois parâmetros a seguir, key e reverse , são opcionais, permitindo uma classificação mais complexa. Vamos ver isso mais tarde também! ? ?

O método de classificação

Ao contrário da função classificada , o método sort classifica a lista no local, retornando None.

O método sort possui a seguinte sintaxe com dois parâmetros opcionais: key e reverse .

list.sort (key =…, reverse =…)

Com os exemplos a seguir, podemos entender melhor como a função classificada e o método de classificação classificam os elementos de uma lista.

Podemos classificar elementos de uma lista basicamente porque a lista é de contêineres ordenados . Além disso, podemos classificar os elementos no local porque as listas são mutáveis ; podemos mudar seus elementos.

Parâmetros adicionais: reverso e chave

Tanto a função classificada quanto o método de classificação classificam os elementos em ordem crescente, a menos que indiquemos o contrário, fornecendo o parâmetro reverse = True .

Outro parâmetro importante é fundamental . Podemos classificar uma lista com base no valor retornado pela função fornecida no parâmetro key. Aplicamos a função a cada elemento da lista e classificamos os elementos com base no valor retornado por essa função. O parâmetro chave pode conter funções internas, anônimas ou normais, bem como métodos.

Nos exemplos a seguir, usamos o parâmetro key para:

  1. Classifique uma lista de strings pelo seu comprimento.

2. Classifique uma lista de strings pelo número de vogais.

3. Classifique uma lista aninhada pelo terceiro valor.

Classificar elementos em uma tupla

Uma tupla é um tipo de dados para sequências ordenadas imutáveis de elementos. Para classificar elementos de uma tupla, podemos usar a função classificada , fornecendo a tupla como o primeiro argumento. Esta função retorna uma lista ordenada do iterável dado, e podemos facilmente converter esta lista em uma tupla usando a tupla de função embutida.

Podemos usar os dois parâmetros opcionais (chave e reverso) também.

Como as tuplas são imutáveis , não podemos usar o método sort como fizemos anteriormente com listas (uma exceção AttributeError é gerada), já que esse método modifica o iterável in-place.

Ordenar elementos num conjunto

Um conjunto é um tipo de dados para coleções não ordenadas mutáveis de elementos exclusivos. Podemos classificar os elementos de um conjunto (lista ordenada), da mesma forma que classificamos os elementos de uma lista ou de uma tupla, usando a função classificada . Não faz sentido converter a lista classificada retornada em um conjunto, pois os conjuntos são contêineres não ordenados (não importa a posição dos elementos).

Como os conjuntos não são ordenados , não podemos usar o método sort (An AttributeError é gerado), uma vez que não podemos ordenar no local um contêiner não-ordenado. ??

Classificar elementos em um dicionário

Um dicionário é um tipo de dados para objetos mutáveis que armazenam mapeamentos de chaves exclusivas para valores . Podemos usar a função classificada com dicionários, como fizemos anteriormente com outros iteráveis, obtendo uma lista ordenada de chaves de dicionário.

Além disso, podemos obter uma lista ordenada de chaves de dicionário por valor , aplicando o método get no parâmetro key da seguinte forma:

Nos dois casos anteriores, obtemos uma lista em vez de um dicionário. Para obter um dicionário ordenado, podemos usar a função classificada em combinação com as compreensões do dicionário . Nos exemplos a seguir, o dicionário é classificado de acordo com suas chaves e valores. Também podemos aplicar o parâmetro reverso à classificação de ordem decrescente.

O contêiner de coleções

O módulo de coleções fornece tipos de dados de contêineres alternativos para contêineres python integrados: list, tuple, set e dictionary. Esses contêineres também podem ser classificados usando a função classificada . Vamos ver um exemplo!

OrderedDict é um contêiner fornecido pelo módulo de coleta, consistindo em um comando que lembra a ordem na qual seu conteúdo é adicionado. Basicamente funciona como um dicionário :), aceitando métodos e funções do dicionário.

Podemos usar a função classificada com os dicionários ordenados, como fizemos anteriormente com os normais, como segue:

O módulo de coleta fornece recipientes alternativos que podem facilitar muito nossa vida de programação ?. Consulte a documentação para obter mais informações sobre como esses contêineres podem ser usados.

8.3. collections – Tipos de dados de contêiner de alto desempenho – Documentação do Python 2.7.16

A é uma subclasse para contar objetos hashables. É uma coleção não ordenada onde os elementos são armazenados como dicionário…

docs.python.org