Puedo usar map
y sum
para lograr esta funcionalidad, pero ¿cómo usar reduce
?Python cómo reducir en una lista de tuplas?
Hay 2 listas: a
, b
, tienen el mismo número de valores. Quiero calcular
a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]
La versión de trabajo que escribí usando map
está
value = sum(map(lambda (x,y): x*y, zip(a, b)))
Cómo usar reduce
entonces? Escribí:
value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))
Recibí el error "TypeError: 'float' object is unsubscriptable
".
¿Alguien puede arrojar algo de luz sobre esto?
Su lambda toma dos tuplas de dos elementos. Eso funciona bien al reducir los primeros dos elementos de su lista, pero ahora la siguiente reducción funcionará en el resultado de su lambda (que es un flotador) y el siguiente elemento de la lista (que es una tupla), y su lambda puede Manejar eso. Su lambda necesita tomar un número y una tupla, y sembrar el número con un valor inicial (como lo hace la respuesta de antonakos). – dfan