HOWTO · Python
Como ordenar um conjunto em Python
Este tutorial mostra como ordenar os valores de um conjunto usando Python.
Nesta página
Um conjunto (set) em Python armazena valores únicos, mas não os mantém em ordem. Para obter os valores ordenados, passe o conjunto para sorted(): a função retorna uma nova lista e não altera o conjunto. Use list.sort() quando já tiver uma lista e quiser reordená-la no próprio lugar; o conjunto não tem um método sort().
Use a função sorted() para ordenar um conjunto em Python
sorted() aceita um iterável e retorna uma lista. Quando os valores podem ser comparados entre si, a ordem padrão é crescente. O conjunto de entrada continua disponível e inalterado, então você pode usá-lo novamente depois. A ordem em que um conjunto é exibido ou percorrido não garante uma ordenação; ordene explicitamente sempre que a ordem for importante.
Para um conjunto pequeno de números inteiros, sorted() retorna uma nova lista em ordem crescente. Execute este exemplo. O código e os textos exibidos nos exemplos permanecem em inglês.
values = {5, 3, 1, 4, 2}
ascending = sorted(values)
descending = sorted(values, reverse=True)
words = {"pear", "fig", "watermelon"}
by_length = sorted(words, key=len)
print(ascending)
print(descending)
print(by_length)
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
['fig', 'pear', 'watermelon']
O parâmetro reverse definido como True inverte a ordem de comparação. O parâmetro key recebe uma função que produz um valor de comparação para cada item; neste exemplo, len ordena palavras de comprimentos diferentes pelo tamanho. Quando as chaves são iguais, a ordem relativa segue a ordem de iteração do iterável de entrada, que não é garantida em um conjunto. Se a ordem dos itens empatados for importante, defina uma chave com um critério de desempate determinístico, como uma tupla com o comprimento e a palavra.
Os valores precisam poder ser ordenados entre si pela comparação padrão, ou a função key precisa retornar valores que possam ser comparados entre si. Por exemplo, um conjunto pode conter números inteiros e strings, mas o Python 3 não permite ordenar diretamente essa mistura de valores. Quando for adequado à tarefa, escolha uma chave que os converta para uma forma comparável consistente. Para objetos personalizados, use uma chave que extraia o atributo que deseja comparar, desde que os valores desse atributo possam ser ordenados.
Use o método sort() para ordenar valores de um conjunto em Python
list.sort() é um método de listas, não de conjuntos. Para usá-lo com valores que vieram de um conjunto, primeiro converta o conjunto em uma lista com list(values) e, em seguida, chame sort() nessa lista. O método altera a lista no próprio lugar e retorna None; não atribua o valor retornado de volta à lista. Ordenar a lista convertida não afeta o conjunto original.
Use os parâmetros key e reverse com list.sort() da mesma forma que com sorted(). Por exemplo, items.sort(key=len, reverse=True) ordena uma lista de strings da mais longa para a mais curta. O método de lista é útil quando você precisa atualizar uma lista que já tem. Se quiser apenas um resultado ordenado e preferir manter o iterável de entrada intacto, em geral sorted() é mais simples.
Converter o resultado de volta para um conjunto com set(ordered) mantém os valores únicos, mas não preserva a ordem de classificação. Conjuntos não garantem uma ordem, portanto não dependa da ordem de exibição ou de iteração após a conversão. Mantenha a lista ordenada para qualquer operação posterior que dependa de sequência, como acessar itens por índice, exibir valores de forma consistente ou processá-los em ordem.
Conclusão
Use sorted(my_set) para obter uma nova lista em ordem crescente; adicione reverse=True para obter a ordem decrescente ou key=... para usar um critério personalizado. Use list(my_set) seguido de list.sort() quando quiser ordenar uma lista no próprio lugar. Nem exibir um conjunto nem converter uma lista ordenada de volta para um conjunto preserva a ordem; use uma lista sempre que a ordem for importante.