Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Sumar dos listas de diferente longitud con Python

5 de noviembre de 2015

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

#1

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

5 noviembre 2015, 13:13