Dot product of two lists in Python

Dot product of two lists in Python

You can do this using a list comprehension:

def dot(K, L):
   if len(K) != len(L):
      return 0

   return sum(i[0] * i[1] for i in zip(K, L))

If either of the lists is empty, zip(K, L) will return []. Then, by definition, sum([]) will give you zero.

Using list comprehension, given V1 and V2 are two vectors(lists):

 sum([x*y for x,y in zip(V1,V2)])

Dot product of two lists in Python

One liner which works for vectors of voluntary size (you may want to define it as a more regular and readable function or change the code to use sum instead of leftmost reduce). It does not define multiplication for non-equal lengths as it is not a part of standard dot product definition –it will just report an error on non-equal lengths:

dotprod =lambda K, L:reduce(lambda z1, z2: z1+z2, map(lambda x: reduce(lambda x1, x2: x1*x2, x), zip(K, L)))

Quick test:

dotprod([1, 2, 3, 4], [5, 6, 7, 8])
Out[39]: 70
5+12+21+32
Out[40]: 70

if you still wish to incorporate the length checks and definition for non-equals multiplication:

dotprod =lambda K, L: reduce(lambda z1, z2: z1+z2, map(lambda x: reduce(lambda x1, x2: x1*x2, x), zip(K, L))) if len(K)==len(L) else 0

dotprod([1, 2, 3, 4], [5, 6, 7, 8])
Out[43]: 70
dotprod([1, 2, 3, 4], [5, 6, 7])
Out[44]: 0

Leave a Reply

Your email address will not be published. Required fields are marked *