zsong zsong - 3 months ago 13
Python Question

Python how to reduce on a list of tuple?

Hi 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? Thanks in advance!

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