我有一份增长率清单,并希望计算所有可用的复合增长率:
l = [0.3, 0.2, 0.1]
输出(作为列表):
o = [0.56, 0.716]
关于复合增长率的计算细节:
0.56 =(1 + 0.3)*(1 + 0.2)-1
0.716 =(1 + 0.3)*(1 + 0.2)*(1 + 0.1)-1
该功能应该灵活到输入列表的长度。
答案 0 :(得分:2)
您可以使用列表推导/生成器表达式表达计算,并使用itertools.accumulate来处理复合:
import itertools as IT
import operator
def compound_growth_rates(l):
result = [xy-1 for xy in
IT.islice(IT.accumulate((1+x for x in l), operator.mul), 1, None)]
return result
l = [0.3, 0.2, 0.1]
print(compound_growth_rates(l))
打印
[0.56, 0.7160000000000002]
或者,等效地,您可以使用list-comprehensions和for循环来编写它:
def compound_growth_rates(l):
add_one = [1+x for x in l]
products = [add_one[0]]
for x1 in add_one[1:]:
products.append(x1*products[-1])
result = [p-1 for p in products[1:]]
return result
我认为使用itertools.accumulate
的优势在于它表达了
代码的意图比for循环更好。但是for循环可能更多
在某种意义上它是可读的,它使用更常见的语法。