2013-07-10 41 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 
相關問題