2013-07-10 40 views
1

我要先后乘列表的相邻元素,并添加乘法:乘相邻的元素,并将它们添加

  • ([1,2,3,4])应该执行(1*2+2*3+3*4)
  • [1,2,3]我想8因为(1*2)+(2*3)
+1

东西是不是你问清楚,无论是你的例子是错误的 - 或者你是不是*乘以* 。 1次2次3是6,而不是8. –

+0

基本上与http://stackoverflow.com/q/14916957/1907098相同,只不过你总结了结果列表。 – Volatility

+0

听起来像你需要'折叠'或'拉链'... – Shark

回答

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 
+0

这就是我认为“多元素”的含义,但看看OP给出的问题主体的例子。 – delnan

+0

@InbarRose为什么地图(* zip)版本不起作用? – ersran9

+1

@ ersran9你的意思是'map(mul,...)'一个? 'mul'需要两个参数,并且 - 可悲 - 不支持传递一个迭代。 – poke

3

使用列表理解:

>>> mylist = [1,2,3,4] 
>>> sum(mylist[i] * mylist[i + 1] for i in range(len(mylist) - 1)) 
20 
3

试试这个:

x=[1,2,3,4] 
print sum(a*b for a,b in zip(x, x[1:])) 
#prints 20 
+4

+1。您可以删除'[:-1]','打印总和(a * b for a,b in zip(x,x [1:]))'产生相同的结果 – iruvar

+0

已更新。谢谢。 –

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 

我需要什么CHAN ge想要function([1,2,3,4])执行(1*2*3*4)

>>> from functools import reduce 
>>> from operator import mul 
>>> reduce(mul, [1, 2, 3, 4]) 
24 
+0

如果想要功能([1,2,3,4])执行(1 * 2 * 3 * 4),我需要什么? – user2469891

+0

@ user2469891看我的编辑。 – poke

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 
0

没有任何名单切片生成表达式/份

>>> mylist = [1,2,3,4] 
>>> sum(mylist[i-1] * j for i, j in enumerate(mylist) if i) 
20 
相关问题