优化 python 中的阶乘函数
Optimizing a factorial function in python
所以我用解包参数(*x)实现了这个功能,但是我想让它显示结果不是return 它,我想要一个很好的 优化 意味着我仍然需要它是一个 两行 函数
1.def fac(*x):
2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial
我尝试通过实现 lambda 来实现这一点,但我不知道如何传递 *x 参数
您的阶乘 lambda 是正确的。我认为您想计算列表 [1, 2, 3] 的阶乘并输出结果,这就是实现此目的的方法。
fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])
将输出:1、2、6
另一个选项,如果你有 python 3.8 是使用新海象运算符 (:=) 的列表理解,这有点棘手,但将计算并输出所有包含 n 的阶乘,同时仍适合您需要的两行。
fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])
将输出:1、2、6、24、120
优化的阶乘数由我在下面创建的函数显示。
def fact(n):
list_fact = []
if n > 1 and n not in list_fact:
list_fact.extend(list(range(1, n + 1)))
return reduce(lambda x, y: x * y, list_fact)
print(fact(9000)) # it will display output within microseconds.
注:
迭代时我将所有以前的值保存到一个列表中,这样就不会每次都计算每个值。
所以我用解包参数(*x)实现了这个功能,但是我想让它显示结果不是return 它,我想要一个很好的 优化 意味着我仍然需要它是一个 两行 函数
1.def fac(*x):
2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial
我尝试通过实现 lambda 来实现这一点,但我不知道如何传递 *x 参数
您的阶乘 lambda 是正确的。我认为您想计算列表 [1, 2, 3] 的阶乘并输出结果,这就是实现此目的的方法。
fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])
将输出:1、2、6
另一个选项,如果你有 python 3.8 是使用新海象运算符 (:=) 的列表理解,这有点棘手,但将计算并输出所有包含 n 的阶乘,同时仍适合您需要的两行。
fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])
将输出:1、2、6、24、120
优化的阶乘数由我在下面创建的函数显示。
def fact(n):
list_fact = []
if n > 1 and n not in list_fact:
list_fact.extend(list(range(1, n + 1)))
return reduce(lambda x, y: x * y, list_fact)
print(fact(9000)) # it will display output within microseconds.
注: 迭代时我将所有以前的值保存到一个列表中,这样就不会每次都计算每个值。