zip
list1 = [2,3,4]
list2 = [3,3,3]
result = sum( x*y for x,y in zip(list1, list2) )
from math import log
result = sum( log(i)*y for i,y in enumerate(list1,1) )

import operator
def dotproduct(vec1, vec2, sum=sum, map=map, mul=operator.mul):
return sum(map(mul, vec1, vec2))
, ,
result = dotproduct(list1,list2)
result = dotproduct(range(1,len(list1)+1),list1, mul=lambda i,x:log(i)*x )
result = dotproduct(map(log,range(1,len(list1)+1) ), list1 )
,
numpy
import numpy as np
logi = np.log(np.arange(1,len(list1)+1)
result = np.dot(logi,list1)
, 2 / ,

def sum_serie(vect, fun = lambda i,x:x, i_star=0):
return sum( fun(i,x) for i,x in enumerate(vect, i_star) )
result = sum_serie( list1, lambda i,x:log(i)*x, 1)
, , -
from itertools import islice
def sum_serie(vect, *slice_arg, fun = lambda x:x):
"""sum_serie(vect, [start,]stop[,step], fun = lambda x:x)"""
if not slice_arg:
slice_arg = (0,None,None)
return sum( fun(x) for x in islice(vect, *slice_arg) )
-
from itertools import islice
def sum_serie_i(vect, *slice_arg, fun = lambda i,x:x):
if not slice_arg:
slice_arg = (0,None,None)
return sum( fun(i,x) for i,x in islice(enumerate(vect), *slice_arg) )
, ,
sum_serie( x, 0, 100, 2, fun=lambda xi: c*xi)
sum_serie_i( x, 0, 100, 2, fun=lambda i,xi: log(i)*xi)
. , serie/iterable/whatever 3 ,
2: PY3, , python 2
def sum_serie_i(vect, *slice_arg, **kargv):
fun = kargv.get('fun', lambda i,x:x)
if not slice_arg:
slice_arg = (0,None,None)
return sum( fun(i,x) for i,x in islice(enumerate(vect), *slice_arg) )