通常,每当我在python中执行for循环时,我都会尝试将其转换为列表理解。这里,我有一个for循环,在每个循环之后都会更改一个变量值。
k=5
for x in range(1,6):
k*=x
print(k)
#output
5
10
30
120
600
我想在列表理解中执行此操作。我试着这么做,但我遇到了语法错误。我在下面尝试过:
[k*=x for x in range(1,6)]
您可以使用walrus运算符(python 3.8+(:
k = 5
output = [k := k * x for x in range(1, 6)]
print(output) # [5, 10, 30, 120, 600]
但这种模式并不受一些人的欢迎。
另一种选择是使用itertools.accumulate
:
from itertools import accumulate
from operator import mul
output = accumulate(range(1, 6), mul, initial=5)
print(*output) # 5 5 10 30 120 600
在这种情况下,初始值5
被附加在开始处。