• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

lanah_

Uma lista dos maiores elementos entre duas listas

8 mensagens neste tópico

Tou tentando achar uma funcao que faca o seguinte: me de como resultado uma nova lista que teja os numeros mais altos de duas outras listas.. Por exemplo, na lista1 = [1,2,3] e lista2 = [2,1,5], deveria me dar como resultado uma nova_lista = [2,2,5].

Tentei fazer , mas ta me dando como resultdo so 1 elemento, que eh o maior de todos:

def larger(list1, list2):
    larger_list = []
    for index1 in list1:
        x = index1
    for index2 in list2:
        y = index2
    if x > y:
        larger_list.append(int(x))
    elif y > x:
        larger_list.append(int(y))
    return larger_list
    

Que que eu tou fazndo de errado??? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens o raciocínio errado, estás a iterar as listas separadamente e devias estar a iterá-las ao mesmo tempo.

Exemplo:

larger_list = []
for par in zip(lista1, lista2): #se lista1 = [1, 3, 5] e lista2 = [4, 2, 10], o zip() vai retornar [(1,4), (3,2), (5,10)]
    larger_list.append(max(par))

Outro exemplo:

larger_list = []
for index in range(min(len(list1), len(list2))):
    larger_list.append(max(list1[index], list2[index]))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse segundo exemplo

for index in range(min(len(list1), len(list2))):    
larger_list.append(max(list1[index], list2[index])) 

Pq q coloca-se o "min" no "range(min(len(list1), len(list2)))"? 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É apenas uma segurança para o caso das listas não terem a mesma dimensão. Se eu usasse len(list1) mas a list2 fosse menor, ao tentar aceder à último index que o range() me dava, ia ser gerada uma IndexError exception porque o index não existia na list2 embora existisse na list1. No 1o caso é desnecessária qualquer verificação deste género porque o zip() apenas retorna pares, i.e., se lhe deres, [1, 3, 5] e [2, 4, 6, 8], ele despreza o 8 porque não existe nenhum 4o elemento na 1a lista.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas se eu tirar o "min" , a funcao nao da certo..

pq nessa funcao, eu ja tva assumindo que as listas tinham mesmo tamanho...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas e que tal fazer isto:

>>> x=[2,1,3]
>>> y=[5,2,0]
>>> z=x+y
>>> z.sort()
>>> z[len(z)/2:]
[2, 3, 5]
>>> 

Algo parecido com isto...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o zip não funciona?

Mas e que tal fazer isto:

>>> x=[2,1,3]
>>> y=[5,2,0]
>>> z=x+y
>>> z.sort()
>>> z[len(z)/2:]
[2, 3, 5]
>>> 

Algo parecido com isto...

Relê o primeiro post e apaga o que acabei de citar ;)
0

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