Prog em Phyton

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
 
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
 
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
 
Última edição:
Back
Topo