Python 3.x 根据值列表计算所有复合增长率

Python 3.x 根据值列表计算所有复合增长率,python-3.x,Python 3.x,我有一份增长率列表,并希望计算所有可用的复合增长率: l = [0.3, 0.2, 0.1] 输出(作为列表): 复合增长率的计算详情: 0.56=(1+0.3)*(1+0.2)-1 0.716=(1+0.3)*(1+0.2)*(1+0.1)-1 该函数应根据输入列表的长度灵活使用。您可以使用列表理解/生成器表达式表示计算,并使用来处理复合: import itertools as IT import operator def compound_growth_rates(l): re

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

l = [0.3, 0.2, 0.1]
输出(作为列表):

复合增长率的计算详情:

0.56=(1+0.3)*(1+0.2)-1

0.716=(1+0.3)*(1+0.2)*(1+0.1)-1


该函数应根据输入列表的长度灵活使用。

您可以使用列表理解/生成器表达式表示计算,并使用来处理复合:

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]

或者,等效地,您可以使用列表理解和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.acculate
的优势在于它表达了 代码的意图优于for循环。但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