我正在尝试构建前十个阶乘的列表
[1,1,2,6,24,120,720,5040,40320,362880]
仅使用列表理解。这可能吗?
我不知道生成器或 lambda。
这是我的尝试,但我完全知道为什么它是错误的:
lst = [1] + [i for i in range(1,10)]
lst[1:10] = [lst[i-1] * i for i in range(1,10)]
print(lst)
请您参考如下方法:
只是为了好玩:
使用列表理解和辅助累加器(结果列表本身)重用先前计算的值的单行 mega-hack
s=[]; s=[s[-1] for x in range(1,10) if not s.append(x*s[-1] if s else 1)]
结果:
[1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
注意:math.factorial 答案是元素随机时的方式。这里速度更快,因为我们可以重用以前的结果。
还有另一个缺点:需要将所有元素存储在一个 list 中,因为 python 不允许像 C 那样使用 if 和赋值。所以我们必须附加到一个列表并否定它返回的 None 所以 if 测试是 True
正如我所说:有趣,但仍然是一个 hack。
