1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Prog em Phyton

Discussão em 'Programação' iniciada por zezito.pT, 17 de Novembro de 2008. (Respostas: 4; Visualizações: 439)

  1. zezito.pT

    zezito.pT Power Member

    Ola pessoal,

    É o seguinte ando aqui as voltas e nao sei o que estarei a fazer mal....eu quero ter um programa que me diga se numa lista tenho valores repetidos: Ex: [2,3,4,2] ----> True, pois tenho o 2 e se [2,3,4,5,6]---->False, nao tenho nenhum repetido.

    O que eu tenho e isto:

    def repetidos(x):
    r=[]
    for i in range(len(x)):
    r=r+
    if r==x:
    return True
    else:
    return False


    o que estarei a fazer de mal???? espero que me possam ajudar...Obrigado a todos desde ja ;D
     
  2. nunoemanuel

    nunoemanuel Power Member



    O erro é que estas a por o valor do indice do ciclo for para a lista R. Ou seja, isso vai dar sempre falso.

    Tenta fazer assim, para cada elemento da lista passada como argumento, verificas se ja existe na lista nova criada, se existir significa que é repetido, caso contrário retorna no fim True.

    Cumps
     
  3. zezito.pT

    zezito.pT Power Member

    Ola nunoemanuel, obrigado por teres respondido....

    É assim o problema esta mesmo ai ja exprimentei "n" de coisas mas nao consigo ou me da sempre true ou sempre false...

    nao faço ideia como terei de pegar....ja tentei de tudo e vou sempre parar ao mesmo raciocinio =|
     
  4. AliFromCairo

    AliFromCairo Power Member

    Boas, tens várias soluções para esse problema. A mais simples é percorreres várias vezes a tua lista, para cada um dos elementos da mesma. Ou seja, imagina que tens a lista [19, 18, 20, 18]; começas pelo 19, e percorres a lista inteira para verificar se existe outro 19, chegando à conclusão que o 19 não se repete. Passas portanto para o 18, repetes o mesmo procedimento e reparas que o 18 se repete na última posição da lista. Em termos de código, é algo do género:

    Código:
    def repetidos(x):
        for i in xrange(len(x)):
            for j in xrange(len(x)):
                if i != j and x[i] == x[j]: # mesmo elemento em diferentes posições => duplicado
                    return True
        else:
            return False # não foi encontrado nenhum duplicado
    
    Como deves reparar, este algoritmo não é muito eficiente, uma vez que para cada elemento da lista, vais ter de percorrer a lista toda de novo.

    Uma maneira simplificada de fazer o mesmo é semelhante ao que eu penso que tentaste fazer com o código que apresentaste, ou seja, utilizar uma lista auxiliar onde vais guardando os elementos que já viste na lista. Em seguida, caso o elemento que estás a inspeccionar já se encontre na tua lista auxiliar, então é garantidamente um duplicado. Algo do género:

    Código:
    def repetidos(x):
        aux = []
        for i in xrange(len(x)):
            if x[i] in aux: # se o elemento já se encontra na lista auxiliar, então é duplicado
                return True
            else: # caso contrário, vamos adicioná-lo à lista auxiliar
                aux.append(x[i])
        else:
            return False
    
    Podes também tentar fazer o mesmo procedimento, ordenando previamente a lista. Desta forma, apenas precisas de guardar o registo do último elemento que viste e, se o elemento que estás a inspeccionar for igual ao último, então é porque tens duplicados.

    Penso que seria engraçado (e benéfico) tentares implementar o algoritmo que descrevi acima.

    Espero que ajude. Qualquer dúvida, coloca aqui.
     
  5. nunoemanuel

    nunoemanuel Power Member

    Este exercicio resolve-se numa linha de código apenas.
    Mas tenta resolver primeiro pelo teu proprio raciocinio e so depois olha para aqui:

    def repetidos(x): return len(set(x)!=len(x)


    O raciocinio que deves ter eh:
    Para cada elemento da lista, ou seja x1,x2,x3...xn:
    ->verificas se existe esse mesmo elemento numa lista nova criada por ti usando o método 'in' por exemplo
    ficas com duas opções:
    1. se o elemento que estas a tentar inserir na lista que criaste, já lá existir, retornas o valor True
    2. se o elemento nao existir na lista que criaste, inseres esse elemento na lista e passas para o proximo elemento

    No final retornas False, que eh o caso de ter percorrido a lista toda e nao ter encontrado nenhum elemento repetido.

    Espero que nao tenha ficado mt confuso.

    Cumps
     
    Última edição: 17 de Novembro de 2008

Partilhar esta Página