He hecho el primer ejercicio que pide: "Escribir una función que sume dos listas de igual longitud y retorne otra lista que contenga la suma de las originales elemento a elemento" Bien!
Adjunto lo que he intentado:
def sumalista(lista1, lista2): resultado=[] for i in range(0, len(lista1)): resultado.append (lista1[i]+lista2[i]) return resultado
Todo esto bien pero me pide lo siguiente ahora:
"Modifique el ejercicio anterior permitiendo que las listas sean desiguales. Los elementos sobrantes de la lista más larga se añadirán al final de la lista resultante".
Respuestas
Teniendo en cuenta cómo has resuelto la primera parte de este ejercicio, lo que tendrías que hacer es determinar primero la longitud de las dos listas y rellenar con ceros la lista más corta. Luego ya podrías reutilizar el mismo código que tienes.
Por otra parte, existen otras formas de solucionar este problema. Por ejemplo, para sumar dos listas de la misma longitud puedes hacer lo siguiente:
>>> lista1 = [1, 2, 3] >>> lista2 = [4, 5, 6] >>> map(sum, zip(lista1, lista2)) [5, 7, 9]
La función zip
combina las dos listas que le pasas ([(1, 4), (2, 5), (3, 6)]
) y luego con map
y sum
lo que hacemos es aplicar la función sum
a cada elemento de la lista.
Este código no te servirá para sumar listas de diferente longitud. En ese caso, tendrás que usar zip_longest()
en vez de zip()
(aunque solo está disponible en Python 3). Esta función rellena la lista más corta con el elemento que le pases hasta alcanzar la misma longitud de la lista más larga:
>>> lista1 = [1, 2] >>> lista2 = [4, 5, 6] >>> map(sum, zip_longest(lista1, lista2, fillvalue=0)) [5, 7, 6]
@javiereguiluz