Eu encontrei o código abaixo para remover duplicatas de uma lista:
seen = set(); print [i for i in list if i not in seen and not seen.add(i)]
Não consegui compreender o que exatamente " e não visto.add(i) " esta parte do código está fazendo como help(set.add) fornece a explicação abaixo:
add(...)
Add an element to a set.
This has no effect if the element is already present.
Aguardo sua ajuda para entendê-lo
A compreensão da lista itera sobre os valores da lista original/de entrada. Queremos que um valor seja adicionado à lista de novos/saídas se e somente se ainda não tiver sido visto, daí a expressão condicional
if i not in seen
. Quando um novo valor é adicionado à lista de novos/saídas, oseen
conjunto deve ser atualizado, daí aseen.add(i)
chamada da função. No entanto, oset.add()
método retornaNone
, que é avaliado comoFalse
. Portanto, onot
operador é adicionado, para quenot seen.add(i)
sempre retorneTrue
.