2012-08-04 70 views
1

可能重复:
Returning the product of a list产品列表蟒

是否有任何其他方式来获取列表的产物,不是这样:

def prod(L): 
p=1 
for i in L: 
    p= i * p 
return p 

这段代码是正确的,但我需要找到另一种方式来做到这一点。我真的找不到它。

+0

检查发现的问题......,我不知道是不是重复的,但我没有找到答案我需要那里。 – Reginald 2012-08-04 10:23:43

+0

@jamylak我试了几次,输出是正确的。 – Reginald 2012-08-04 10:24:46

+0

@jamylak为什么不呢? – phant0m 2012-08-04 12:17:49

回答

8

reduce(f, iterable[, initializer])使用:

>>> from operator import mul 
>>> reduce(mul, [1, 2, 3], 1) 
6 

reduce()摘要在下面的模式: a ⊗ b ⊗ c ⊗ d ⊗ e ...其中是二进制(左结合)运算符,即,接受两个参数的函数。

+0

这不适用于空列表。 – Dogbert 2012-08-04 10:19:14

+0

@Dogbert是的,它会,因为初始化器给出。 – phant0m 2012-08-04 12:15:11

+1

只是注意到这个问题被标记为“python-3.x”,而在Python 3中,“reduce”函数不是内置的。相反,它在'functools'模块中。 – 2012-08-04 12:17:47

3
>>> reduce(lambda x, y: x * y, [1, 2, 3], 1) 
6 
>>> reduce(lambda x, y: x * y, [], 1) 
1 
1
def prod(array): 
    if len(array)==0: return 1 
    else: return array[0]*prod(array[1:]) 
4

如果你允许使用numpy

import numpy as np 
product = np.product([1, 2, 3]) # returns 1.0 if empty list