2011-08-15 35 views
2

的整數我試圖調用包含整數和長名單上減少列表的減少。例如,我想打電話給使用包含在多頭蟒蛇

reduce(int.__mul__, [ 231212312412L, 3 ], 1) 

但我得到一個未實現的錯誤。當我用long的mul方法替換int的mul方法時,它會抱怨它獲得了一個int。我必須將它們映射到一個很長的頭?喜歡這個。

reduce(long.__mul__, map(long, [ 12312412314L, 5 ]), 1L) 
+0

你也不需要指定一個初始值,它會從序列中的前兩個項目啓動。 – agf

+2

只是讓一個該死的'for'循環。它更快,更易讀。 – JBernardo

回答

7
>>> from operator import mul 
>>> reduce(mul, map(long, [ 12312412314L, 5 ]), 1) 
61562061570L 
>>> reduce(mul, [ 231212312412L, 3 ], 1) 
693636937236L 
>>> 

運營商有:

5

int.__mul__只能乘兩個整數,同樣,long.__mul__二次長。但正常的*操作會自動處理不同的數值類型爲你,這樣你就可以做的是簡單地使用假冒的工作拉姆達「*」:

reduce(lambda x,y: x*y, [ 231212312412L, 3 ], 1) 

還是有的,使用operator.mul但記得要導入它第一! (這很可能會更快,實際上)

2

你不需要花哨reduce

total = 1 
for x in your_list: 
    total *= x 

這是更具可讀性和更快