Preservando a Ordem ao Converter uma Lista em um Conjunto (Set)
Agora que entendemos o problema, vamos explorar métodos para converter uma lista em um conjunto, preservando a ordem original dos elementos.
Método 1: Usando um Dicionário para Preservar a Ordem
Uma abordagem é usar um dicionário para acompanhar a ordem dos elementos. Desde o Python 3.7, os dicionários mantêm a ordem de inserção por padrão.
Crie um novo arquivo chamado dict_approach.py:
## Usando um dicionário para preservar a ordem
frutas = ["maçã", "banana", "laranja", "maçã", "pera", "banana"]
## Crie um dicionário com elementos da lista como chaves
## Isso remove automaticamente duplicatas, preservando a ordem
frutas_unicas_dict = dict.fromkeys(frutas)
## Converta as chaves do dicionário de volta para uma lista
frutas_unicas = list(frutas_unicas_dict)
print("Lista original:", frutas)
print("Elementos únicos (ordem preservada):", frutas_unicas)
Execute o arquivo:
python3 dict_approach.py
Você deve ver:
Lista original: ['maçã', 'banana', 'laranja', 'maçã', 'pera', 'banana']
Elementos únicos (ordem preservada): ['maçã', 'banana', 'laranja', 'pera']
Observe que a ordem da primeira ocorrência de cada elemento é preservada.
Método 2: Usando OrderedDict
Para usuários de versões do Python anteriores a 3.7, ou para tornar a intenção mais explícita, podemos usar OrderedDict do módulo collections.
Crie um novo arquivo chamado ordered_dict_approach.py:
## Usando OrderedDict para preservar a ordem
from collections import OrderedDict
frutas = ["maçã", "banana", "laranja", "maçã", "pera", "banana"]
## Crie um OrderedDict com elementos da lista como chaves
## Isso remove automaticamente duplicatas, preservando a ordem
frutas_unicas_ordenadas = list(OrderedDict.fromkeys(frutas))
print("Lista original:", frutas)
print("Elementos únicos (ordem preservada):", frutas_unicas_ordenadas)
Execute o arquivo:
python3 ordered_dict_approach.py
A saída deve ser:
Lista original: ['maçã', 'banana', 'laranja', 'maçã', 'pera', 'banana']
Elementos únicos (ordem preservada): ['maçã', 'banana', 'laranja', 'pera']
Método 3: Usando um Loop e um Conjunto (Set) para Verificação
Outra abordagem é usar um loop e um conjunto para verificar se já vimos um elemento antes.
Crie um novo arquivo chamado loop_approach.py:
## Usando um loop e um conjunto para preservar a ordem
frutas = ["maçã", "banana", "laranja", "maçã", "pera", "banana"]
frutas_unicas = []
visto = set()
for fruta in frutas:
if fruta not in visto:
visto.add(fruta)
frutas_unicas.append(fruta)
print("Lista original:", frutas)
print("Elementos únicos (ordem preservada):", frutas_unicas)
Execute o arquivo:
python3 loop_approach.py
A saída deve ser:
Lista original: ['maçã', 'banana', 'laranja', 'maçã', 'pera', 'banana']
Elementos únicos (ordem preservada): ['maçã', 'banana', 'laranja', 'pera']
Todos os três métodos alcançam o mesmo resultado: remover duplicatas, preservando a ordem da primeira ocorrência de cada elemento.