我想连续乘以列表的相邻元素并添加乘法:
([1,2,3,4])
应执行(1*2+2*3+3*4)
和[1,2,3]
我希望得到8
,因为(1*2)+(2*3)
答案 0 :(得分:3)
使用列表理解:
>>> mylist = [1,2,3,4]
>>> sum(mylist[i] * mylist[i + 1] for i in range(len(mylist) - 1))
20
答案 1 :(得分:3)
试试这个:
x=[1,2,3,4]
print sum(a*b for a,b in zip(x, x[1:]))
#prints 20
答案 2 :(得分:3)
>>> sum(a * b for (a, b) in pairwise([1, 2, 3, 4]))
20
>>> sum(a * b for (a, b) in pairwise([1, 2, 3]))
8
如果想要
function([1,2,3,4])
执行(1*2*3*4)
,我需要更改哪些内容?
>>> from functools import reduce
>>> from operator import mul
>>> reduce(mul, [1, 2, 3, 4])
24
答案 3 :(得分:1)
def my_math(lst):
return sum(map(lambda x: x[0]*x[1], zip(lst, lst[1:])))
>>> my_math([1,2,3])
8
>>> my_math([1,2,3,4])
20
>>> my_math([1,2,3,4,5])
40
答案 4 :(得分:0)
In [88]: mylist = [1,2,3,4]
In [89]: sum(itertools.imap(lambda t: operator.mul(*t), itertools.izip(mylist, itertools.islice(mylist, 1, len(mylist)))))
Out[89]: 20
答案 5 :(得分:0)
没有任何列表切片/副本的生成器表达式
>>> mylist = [1,2,3,4]
>>> sum(mylist[i-1] * j for i, j in enumerate(mylist) if i)
20