Ir para o conteúdo
soraiaduarte

recursão e listas imbricadas

Mensagens Recomendadas

soraiaduarte    0
soraiaduarte

boas!

estou a tentar definir uma função que calcula o mínimo de uma lista de listas imbricadas de forma recursiva.

a minha ideia era criar uma nova lista com todos os inteiros e depois, a partir dessa lista, calcular o mínimo.

a minha duvida é: o que há de errado com o que fiz para que a lista ls que criei não contenha os inteiros da lista imbricada? como colocá-los lá?

def recursive_min(l):
ls=[]
for elm in l:
	if type(elm)==type([]):
		recursive_min(elm)
	else:
		ls.append(elm)
return ls
#etc... (a ideia era depois calcular o mínimo da ls)
print(recursive_min([2, 9, [1, 13], 8, 6]))

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
hmiguel    0
hmiguel

boas!

estou a tentar definir uma função que calcula o mínimo de uma lista de listas imbricadas de forma recursiva.

a minha ideia era criar uma nova lista com todos os inteiros e depois, a partir dessa lista, calcular o mínimo.

a minha duvida é: o que há de errado com o que fiz para que a lista ls que criei não contenha os inteiros da lista imbricada? como colocá-los lá?

def recursive_min(l):
ls=[]
for elm in l:
	if type(elm)==type([]):
		recursive_min(elm)
	else:
		ls.append(elm)
return ls
#etc... (a ideia era depois calcular o mínimo da ls)
print(recursive_min([2, 9, [1, 13], 8, 6]))

Repara que sempre que entras na função apagas tudo o que está na lista ls. Ora vê lá.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Pensa antes desta maneira:

Tens uma lista, e queres saber o mínimo desta lista. Corres uma funcao para calcular o minimo em cada elemento. Se esse elemento for uma lista, vais calcular o valor minimo nessa lista e consideras que o elemento original é na verdade esse valor mínimo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
soraiaduarte    0
soraiaduarte

Muito obrigada pelas vossas dicas, ajudaram-me bastante. Já consegui construir a função definindo outra dentro dela para evitar o problema de apagar a ls. Mas, de qq das formas, gostava de conseguir construir dessa maneira que me dizes. Fiz isto:

def recursive_min(l):
prim=l[0]
for i in range(len(l)):
	if type(prim)==type(6) and type(l[i])==type(6):
		if l[i]<prim:
			prim=l[i]
	else:
		recursive_min(l[i])
return prim
print(recursive_min([2, 9, [1, 13], 8, 6]))

mas não está a funcionar. Ainda não estou muito a vontade na recursão. O que está errado com o que eu fiz? Como posso melhorar a função?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Repara que não estás a usar o resultado da chamada recursive_min() em lado nenhum para usares. Tens que guardar esse valor para fazeres a comparação.

Repara também que tens que verificar primeiro se o elemento é uma lista e só depois de chamares a funcao recursive_min() para a converter para um número (o mínimo dessa lista) é que fazeres a comparação.

Fica aqui um exemplo com uma approach um pouco diferente:

def recursive_min(l):
    first = True
    m = 0
    if len(l) == 0:
        return 0

    if type(l[0]) != type(6):
        l[0]=recursive_min(l[0]) #aqui está o que te estava a faltar

    if len(l) == 1:
        return l[0]
    
    for i in range(len(l)):
        for j in range(len(l))[1:]:	
            if type(l[j]) != type(6):
                l[j]=recursive_min(l[j]) #aqui está o que te estava a faltar
            
            if first:
                m = min(l[i], l[j]) #aqui está o porquê de precisares de guardar o resultado
                first = False
            else:
                m = min(m, l[i], l[j]) #aqui está o porquê de precisares de guardar o resultado
    return m

print recursive_min([[9,[9,[9,9]]]])

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade