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
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
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 =|
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.
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