从值列表中计算所有复合增长率

时间:2017-10-03 13:03:13

标签: python-3.x

我有一份增长率清单,并希望计算所有可用的复合增长率:

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

该功能应该灵活到输入列表的长度。

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循环可能更多 在某种意义上它是可读的,它使用更常见的语法。