私はPythonが初めてで、構文とさまざまな機能を学んでいます。私は知りたいです
x=reduce((lambda x,y: x*y) , [x for x in range(5) if x > 0])
の階乗を計算するための正しい関数は何ですか?
敬具
私はPythonが初めてで、構文とさまざまな機能を学んでいます。私は知りたいです
x=reduce((lambda x,y: x*y) , [x for x in range(5) if x > 0])
の階乗を計算するための正しい関数は何ですか?
敬具
http://www.willamette.edu/~fruehr/haskell/evolution.htmlの行に沿ったもの
# beginner
def fac(n):
f = 1
i = 1
while i <= n:
f *= i
i += 1
return f
# advanced beginner
def fac(n):
return n * fac(n - 1) if n > 1 else 1
# intermediate
def fac(n):
return reduce(lambda x, y: x * y, range(1, n + 1))
# advanced intermediate
import operator
def fac(n):
return reduce(operator.mul, xrange(1, n + 1))
# professional
import math
print math.factorial(5)
# guru
import scipy.misc as sc
print sc.factorial(5, exact=True)
短い:
x = reduce(lambda x,y: x*y, range(1,5))
より短く、ラムダの代わりに:
from operator import mul
x = reduce(mul, range(1,5))
または最短、数学モジュールから(ホップに感謝):
from math import factorial
factorial(4) # range/xrange above does not include the upper value
かなり - ただし、5! が必要な場合は、 を使用する必要がありますrange(6)
。また、文体上の小さな問題: 一時的なリストを作成する必要がないように、ジェネレータ式を括弧ではなく括弧で囲む必要があります。最後に、if 句は必要ありません。引数が 2 つのバージョンの を使用してくださいrange
。
def factorial(n):return reduce(lambda x,y:x*y,[1]+range(1,n+1))
再帰を使用した別のアプローチ:
def factorial(n):
if n == 0:
return 1
else:
return n*factorial(n-1)
とにかく、math.factorialを使用することをお勧めします。