如何编写一个程序来乘以最短的数字列表?

时间:2013-02-04 13:21:04

标签: python sequence

当我制作一个简单的计算器时,我就到了这一点。我做了一个简单的程序来总结数字列表如下,但乘法程序有点长。

所以任何人都可以知道如何在python中对多个数字列表进行短程序。这是我的代码看起来像。

def calculate(oper,*nm):
    return oper(nm)

add=lambda x:sum(x)

def mult(lst):
    tmp=1
    for i in lst:
        tmp*=i
    return tmp

计算(加,2,34,2)

计算(多重峰,8,5,7)

2 个答案:

答案 0 :(得分:4)

实际上,您不需要定义calculate,因为Python已经有了它的名称:reduce

def calculate(oper, *nm):
    return reduce(oper, nm)

In [6]: import operator

In [7]: calculate(operator.add, 2, 34, 2)
Out[7]: 38

In [8]: calculate(operator.mul, 8, 5, 7)
Out[9]: 280

注意:在Python3中,reduce已移至functools module。 (感谢@ErikRoper指出这一点。)

答案 1 :(得分:0)

您可以使用内置的reduce函数,它具有可调用的列表和可选的起始元素。它使用元组callable调用(elem, result),其中元素是列表中的ith元素,到目前为止result是结果。

reduce(lambda item,prod: item * prod, range(1, 5), 1)
Out[2]: 24

所以上面会先用(1,1)调用lambda函数,然后调用(2,1*1)然后调用(3,2*1),最后调用(4,3*2)

因此,您要定义addmult并将calculate替换为内置的reduce

add = lambda item,cumul_sum: item + cumul_sum
mult = lambda item,product: item * product 
reduce(add, range(1,5), 0)
Out[5]: 10
reduce(mult, range(1,5), 1)
Out[6]: 24

http://docs.python.org/2.7/library/functions.html?highlight=reduce#reduce