在lambda语句内的for语句内使用if else语句

问题描述

所以我知道这项工作:

fac = lambda x: [element for element in x]

这也可行:

fac = lambda x: x*fac(x-1) if x!=0 else 1

但是为什么不起作用:

fac = lambda *x :  [ n * fac(n-1) if n!=0 else 1 for n in x]

我有一个无限循环。

解决方法

如果输入为n * fac(n-1)

3将创建以下列表:-

[[[[1],[1]],[[1],[1]]]]

您需要从列表中获取第一个元素,然后将其乘以n:-

fac = lambda *x :  [ n * fac(n-1)[0] if n!=0 else 1 for n in x]
print(fac(3))

输出-

[6]