1

簡単な電卓を作っていたときに、この時点に到達しました。次のように数のリストを合計する簡単なプログラムを実行しましたが、乗算のプログラムは少し長いです。

だから誰もが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)

4

2 に答える 2

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では、 functoolsモジュールreduceに移動されました。(これを指摘してくれた@ErikRoperに感謝します。)

于 2013-02-04T13:24:10.223 に答える
0

組み込みreduce関数を使用できます。この関数は、呼び出し可能オブジェクト、リスト、およびオプションの開始要素を取ります。callableこれはタプルで呼び出します(elem, result)。ここで、elementはithリストの要素でresultあり、これまでの結果です。

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

したがって、上記はラムダ関数を最初に、、(1,1)次に(2,1*1)(3,2*1)そして最後に呼び出します。(4,3*2)

したがって、定義addして、組み込みのreduceにmult置き換えます。calculate

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

于 2013-02-04T13:23:58.467 に答える