HOWTO · Python
Como obter valores únicos a partir de uma lista em Python
O artigo introduz métodos para obter valores únicos a partir de uma lista em Python
Nesta página
Para obter valores únicos de uma lista Python no Python 3.7 ou posterior, use list(dict.fromkeys(values)) quando os elementos forem hasháveis e você quiser preservar a ordem da primeira ocorrência de cada um. Se os elementos não forem hasháveis, use um laço que monte uma lista de resultados. Converta para set(values) somente quando a ordem não importar.
Obtenha valores únicos em ordem com dict.fromkeys()
dict.fromkeys() cria um dicionário cujas chaves vêm do iterável de entrada. As chaves de um dicionário são únicas e, no Python 3.7 ou posterior, a ordem de inserção é preservada. Assim, converter as chaves de volta para uma lista remove as duplicatas sem alterar a posição da primeira ocorrência de cada valor. Como acontece com chaves de dicionário em geral, todos os elementos precisam ser hasháveis.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = list(dict.fromkeys(values))
print(unique_values)
Saída:
['pear', 'apple', 'plum']
Obtenha valores únicos em ordem com um laço
Quando os valores não são hasháveis, como no caso de listas aninhadas, um dicionário ou conjunto não pode usá-los como chaves ou elementos. Em vez disso, um laço explícito pode comparar cada valor com os que já foram coletados. Ele mantém a primeira ocorrência e funciona com listas cujos valores permitem comparações de igualdade significativas.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
values = [[1, 2], [3, 4], [1, 2]]
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append(value)
print(unique_values)
Cada verificação value not in unique_values percorre a lista de resultados. Conforme aumenta o número de itens distintos, as comparações repetidas podem tornar essa abordagem mais lenta que os métodos baseados em hash. Use-a quando a possibilidade de lidar com elementos não hasháveis for mais importante que a velocidade.
Obtenha valores únicos com set() quando a ordem não importar
Para elementos hasháveis, set(values) remove duplicatas de forma concisa. Um conjunto não preserva a ordem da lista de entrada, então não conte com uma sequência específica ao convertê-lo de volta para uma lista. Os elementos de um conjunto também precisam ser hasháveis. Use essa opção quando a ordem for irrelevante, por exemplo, para verificar pertinência ou comparar quais valores estão presentes.
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = set(values)
print(unique_values)
A ordem exibida do conjunto pode variar. O resultado contém os valores distintos, mas não há garantia de uma ordem específica na impressão.
Escolha um método para sua lista
Escolha dict.fromkeys() para obter uma lista de resultados concisa que preserve a primeira ocorrência de cada valor hashável. Escolha o laço explícito quando os valores puderem não ser hasháveis, como listas, e a ordem da primeira ocorrência ainda importar. Escolha set() quando os valores forem hasháveis e a ordem não tiver importância.
Para entradas hasháveis, a busca por pertinência em dicionários e conjuntos costuma ser eficiente em média, enquanto o laço percorre repetidamente a lista de resultados crescente. Esses métodos definem duplicatas com base no comportamento de igualdade e hash do Python: valores iguais, como 1 e True, são considerados iguais e acabam em uma única entrada. Se sua aplicação precisar de outra definição de unicidade, normalize cada item ou derive uma chave para ele antes de remover duplicatas com base nessa chave.