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

Sign in to follow this  
lanah_

Uma lista dos maiores elementos entre duas listas

Recommended Posts

lanah_

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??? ;)

Share this post


Link to post
Share on other sites
djthyrax

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]))


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
lanah_

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)))"? 

Share this post


Link to post
Share on other sites
djthyrax

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


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
lanah_

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

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

Share this post


Link to post
Share on other sites
Tharis

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

Share this post


Link to post
Share on other sites
djthyrax

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 ;)

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
djthyrax

Outra hipótese é simplesmente:

return map(max, list1, list2)


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.