Remove duplicate elements from a threaded list in python

1

My code returns error when trying to run:

class No:
    def __init__(self,inidado):
        self.dado = inidado
        self.proximo = None

    def pegaDado(self):
        return self.dado

    def pegaProximo(self):
        return self.proximo

    def botaDado(self,novoDado):
        self.dado = novoDado

    def botaProximo(self,novoProximo):
        self.proximo = novoProximo

class ListaNaoOrdenada:
    def __init__ (self):
        self.inicio = None

    def Inserir(self,item):
        temp = No(item)
        temp.botaProximo(self.inicio)
        self.inicio = temp

    def Imprimir (self):
        atual = self.inicio
        while atual != None:
            print (atual.pegaDado())
            atual = atual.pegaProximo()

    def removeDuplicados(self):
        atual = segundo = self.inicio
        while atual != None:
            while segundo.pegaProximo != None:  
                if segundo.pegaProximo.pegaDado == atual.pegaDado:
                    segundo.pegaProximo = segundo.pegaProximo.pegaProximo  
                else:
                    segundo = segundo.pegaProximo

                atual = segundo = atual.pegaProximo
l = ListaNaoOrdenada()
l.Inserir(2)
l.Inserir(5)
l.Inserir(5)
l.Inserir(5)
l.Imprimir()
l.removeDuplicados()
l.Imprimir()

I would like to know what to change to return only 2

    
asked by anonymous 01.12.2017 / 16:10

1 answer

1

Hello,

I'm not debugging the error in your code but python has a native data type which is similar to an unordered list, and removes duplicates by definition: set (set in Portuguese).

Example:

>>> myset = set()
>>> myset.add(1)
>>> myset.add(5)
>>> myset.add(5)
>>> myset.add(5)
>>> print(myset)
{1, 5}

Of course, you can easily transform it into a list or list ordered:

# Tranforma em lista.
>>> print(list(myset))
[1, 5]
>>> myset.add(-10)
>>> print(sorted(myset))
[-10, 1, 5]
    
04.12.2017 / 20:31