A compreensão da lista itera sobre os valores da lista original / de entrada. Queremos que um valor seja adicionado à nova lista de saída se, e somente se, ela ainda não foi vista, daí a expressão condicional if i not in seen
. Quando um novo valor é adicionado à lista nova / saída, o seen
set precisa ser atualizado, daí a chamada da função seen.add(i)
. No entanto, o método set.add()
retorna None
, que é avaliado como False
. Portanto, o operador not
é adicionado, para que not seen.add(i)
sempre retorne True
.