Remover itens duplicados de lista em Python

Neste artigo você vai aprender a como remover itens duplicados de lista em Python, de uma maneira super simples e intuitiva

Pra remover itens duplicados de uma lista em Python, converta a lista em set e volte pra lista: lista_unica = list(set(lista))

O set é uma coleção não ordenada de elementos distintos e hashable, então ele elimina as repetições, mas não garante a ordem original (remover duplicatas de uma sequência é, inclusive, um dos usos documentados do tipo set)

Se a ordem importa, use list(dict.fromkeys(lista)): o dict.fromkeys monta um dicionário usando os itens como chaves, e desde o Python 3.7 os dicionários preservam a ordem de inserção por especificação da linguagem

Se tu só quer o resultado ordenado, use sorted(set(lista))

Remover itens duplicados de lista capa

Fala programador(a), beleza? Bora aprender mais sobre os dados de lista e também sobre a linguagem Python!

Para remover a duplicidade de elementos em um lista vamos utilizar a função set, que tem exatamente esta premissa

Entregar uma lista de dados apenas com valores únicos, o problema é que o retorno de set é um dicionário

Ou seja, teremos uma alteração no tipo de dado, e isso talvez não seja interessante

Então vamos utilizar a função list neste set, que transforma o dicionário em uma lista e aí resolveremos todos os nossos problemas

Formação Vibe Coding
Formação Recomendada

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Veja um exemplo prático da implementação de set:

lista = [1, 1, 2, 3, 3, 4, 5, 5]

lista_unica = list(set(lista))

print(lista_unica) # [1, 2, 3, 4, 5]

Temos primeiramente uma lista que contém valores duplicados, na variável lista

Então na segunda lista de código colocamos esta lista como argumento de set, que vai deixar os valores únicos

E também inserimos este resultado no método list, o que gera uma lista a partir do resultado de set

Como é possível conferir no print, temos uma lista apenas com valores únicos como resultado!

Conclusão

Neste artigo você aprendeu a como remover itens duplicados de lista, na linguagem Python

Utilizamos a função set em conjunto da função list

Como explicado anteriormente, set entrega um dicionário apenas com valores únicos e list transforma o dicionário em lista =)

Confira nossos cursos gratuitos no Youtube, com vídeos todos os dias!

Se inscreva e ative o sininho para receber as notificações e aprender mais ainda sobre desenvolvimento web!

Veja também nosso catálogo de cursos na Udemy, todos com exercícios e projetos práticos, nas mais diversas tecnologias

O link acima contém um cupom de desconto para os cursos!

Bloco de resposta direta (o texto de geo.respostaDireta), sem subtítulo, em linhas curtas, funcionando como resumo extraível no topo do post

E a ordem da lista? Se liga nisso:

O set é uma coleção não ordenada de elementos distintos, isso está na própria documentação do Python

Ou seja: ele garante que não sobra repetição, mas não promete devolver os valores na mesma ordem em que eles estavam na lista original

Então não escreve código contando com uma ordem que ninguém te prometeu

Se a ordem crescente resolve pra ti, joga um sorted() em volta:


lista_unica = sorted(set(lista))

print(lista_unica)

Agora sim tu tem controle do que sai 🙂

Como remover duplicados e manter a ordem original:

E se tu não quer ordenar, quer exatamente a ordem em que os itens apareceram na lista? Aí o caminho é outro: dict.fromkeys()

Ele cria um dicionário novo usando os itens do iterável como chaves (o valor padrão de cada uma é None)

E chave de dicionário não repete, então a duplicata morre ali mesmo

O detalhe que faz a mágica funcionar: desde o Python 3.7, a preservação da ordem de inserção dos dicionários é parte oficial da especificação da linguagem


lista_unica = list(dict.fromkeys(linguagens))

Cada item entra na ordem da primeira aparição e as repetições seguintes são ignoradas, mto massa né?

Isso funciona em qual versão do Python?

Hoje as séries que ainda recebem atualização são a 3.10, 3.11, 3.12, 3.13 e 3.14 (a 3.9 e anteriores já chegaram ao fim de vida)

A versão estável mais recente é a 3.14.7

Como a ordem do dicionário virou especificação lá no 3.7, o list(dict.fromkeys(lista)) é seguro em qualquer versão que ainda tenha suporte hoje

TypeError: unhashable type: ‘list’? Calma:

Caso este erro apareça, não é bug teu, é regra do tipo

Os elementos de um set precisam ser hashable, e isso não é opcional

Então se tu tentar tirar duplicata de uma lista que tem listas dentro, o Python levanta TypeError na tua cara:


list(set(lista)) # TypeError: unhashable type: 'list'

Com valores simples, tipo números e strings, tu segue tranquilo

Com estruturas mutáveis dentro da lista, o set não resolve direto, e vale saber disso ANTES de rodar o código em produção

set() ou {}? Não confunde:

Dá pra criar conjunto com chaves, tipo {1, 2, 3}, e também com a função set()

Mas pra criar um conjunto VAZIO só existe um jeito: set()

Porque {} sozinho cria um dicionário vazio, não um conjunto

vazio = set()   # conjunto vazio
nao_e_set = {}  # dicionário vazio

É daqui que vem boa parte da confusão entre set e dicionário, beleza?

Seção "## Perguntas frequentes:" com os pares de pergunta e resposta do bloco geo.faq, cada pergunta como H3

Bloco de primeira mão (texto de geo.primeiraMao), com o link para o vídeo do canal sobre remover elemento de lista em Python

Um aviso de quem já gravou vídeo aqui no canal sobre remover elemento de lista em Python: não confunde os dois problemas

Lá eu mostro o pop(), que sem argumento nenhum tira o último elemento da lista, e com um índice (pop(2), por exemplo) tira o elemento daquela posição

E o detalhe que eu bato na tecla no vídeo: o pop mexe na estrutura original, tu não precisa atribuir o retorno dele pra lista mudar

Então se tu quer manter uma cópia do dado original, guarda ela em outra variável ANTES, senão já era

Tome cuidado com isso, porque é erro fácil de cometer no meio de um script grande

Aqui no post é outra história: set e dict.fromkeys agem na lista inteira, tirando repetição, não posição

Se quiser ver o pop rodando na prática, o vídeo está lá no canal =)

Perguntas frequentes

Como remover itens duplicados de uma lista em Python?

Converta a lista em set e depois de volta em lista: lista_unica = list(set(lista))

O set é uma coleção de elementos distintos, então as repetições somem sozinhas, e remover duplicatas de uma sequência é um dos usos documentados desse tipo

list(set(lista)) mantém a ordem original da lista?

Não

O set é uma coleção NÃO ordenada, então a ordem da saída não é garantida

Se tu precisa de ordem crescente, use sorted(set(lista)); se precisa da ordem em que os itens apareceram, use list(dict.fromkeys(lista))

Como tirar duplicados de uma lista sem perder a ordem?

Com list(dict.fromkeys(lista))

O dict.fromkeys cria um dicionário novo a partir das chaves de um iterável (com valor padrão None), e chave de dicionário não repete

Como a preservação da ordem de inserção dos dicionários virou parte oficial da especificação da linguagem no Python 3.7, cada item fica na posição da primeira aparição

A função set() retorna um dicionário?

Não

Ela devolve um objeto do tipo set, um conjunto: coleção não ordenada de elementos distintos e hashable

A confusão costuma vir das chaves: {} sozinho cria um dicionário vazio, enquanto set() cria um conjunto vazio

Por que aparece TypeError: unhashable type: ‘list’?

Porque os elementos de um set precisam ser hashable

Se a tua lista tem listas dentro, o Python não consegue hashear esses valores e levanta TypeError

Com valores simples, como números e strings, o list(set(lista)) roda numa boa

Como criar um conjunto vazio em Python?

Com set()

Esse é o único jeito, porque {} cria um dicionário vazio

Em quais versões do Python isso funciona?

Nas versões que ainda recebem atualização hoje: 3.10, 3.11, 3.12, 3.13 e 3.14 (a 3.9 e anteriores já chegaram ao fim de vida)

A versão estável mais recente é a 3.14.7

Como a ordem do dicionário virou especificação no 3.7, o truque do dict.fromkeys é seguro em todas elas

Qual a diferença entre remover duplicados e remover um elemento da lista?

São problemas diferentes

Remover duplicados age na lista inteira, tirando as repetições (set ou dict.fromkeys)

Remover um elemento age em UM item específico, normalmente pela posição, com o método pop(), que altera a lista original

Leia também

Subscribe
Notify of
guest

3 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Breno Farias

Uma coisa interessante a se notar, é que esse tipo de remoção de item duplicado altera a ordem da lista, então por exemplo, se eu fizer
list= [ 3,3,2,2,5,5,4,4,1,1]
quando executar esse set para remover duplicatas ficará
newlist=[1,2,3,4,5]
Então tomem cuidado!!

Battisti

obrigado pela contribuição Breno!

JUCIO

Uma outra solução seria contar as ocorrencias em uma lista limitada usei o for e deu certo segue abaixo:

wordlist = [“www”, “www”, “ftp”, “ftpquote”, “ftp”, “passw”, “senha”, “user”]
for c in (wordlist):
    if wordlist.count(c) > 1:
        wordlist.remove(c)
print(wordlist)

Formações

Formação SAAS com IA

Formação SAAS com IA

Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!

  • 291 aulas
  • 18 projetos
  • 24h 17min

Blog | Mais populares