私が理解している限り、reduce関数はリストl
と関数をとります。次に、リストの最初の2つの要素の関数f
を呼び出し、次のリスト要素と前の結果を持つ関数f
を繰り返し呼び出します。機能の削減はどのように機能しますか?
だから、私は次の関数を定義します。
次の関数は階乗を計算します。
def fact(n):
if n == 0 or n == 1:
return 1
return fact(n-1) * n
def reduce_func(x,y):
return fact(x) * fact(y)
lst = [1, 3, 1]
print reduce(reduce_func, lst)
これは私にはありません((1! * 3!) * 1!) = 6
?しかし、代わりに720
となります。なぜ720
ですか?それは6
の階乗もとるようです。しかし、私はなぜそれを理解する必要があります。
誰かがこれが起こる理由と回避策を説明できますか?
基本的には、リスト内のすべての項目の階乗の積を計算したいと考えています。 バックアップ計画は、ループを実行して計算することです。しかし、私はreduceを使うのが好きです。
ありがとうございます。私は逃したばかげたことを理解しました。そして私は答えでこれを行う正しい方法を投稿しました。 – Divya
* reduce *についてより深く理解するには、以下に示す純粋なpythonの同等機能を参照してください。 –