I am able to use map
and sum
to achieve this functionality, but how to use reduce
?
There are 2 lists: a
, b
, they have same number of values. I want to calculate
a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]
The working version I wrote using map
is
value = sum(map(lambda (x,y): x*y, zip(a, b)))
How to use reduce
then? I wrote:
value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))
I got the error “TypeError: 'float' object is unsubscriptable
“.
Can anyone shed some light on this?
Advertisement
Answer
The first argument of the lambda function is the sum so far and the second argument is the next pair of elements:
value = reduce(lambda sum, (x, y): sum + x*y, zip(a, b), 0)