将列表的相邻元素相乘并添加它们

时间:2013-07-10 11:59:58

标签: python list

我想连续乘以列表的相邻元素并添加乘法:

  • ([1,2,3,4])应执行(1*2+2*3+3*4)
  • [1,2,3]我希望得到8,因为(1*2)+(2*3)

6 个答案:

答案 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)

使用pairwise itertools recipe

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

使用summaplambdazip

的功能
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