我有以下for循环:
other_values=[3,4,5,3,2]
values=[5]
for i in range(len(other_values)):
values.append(values[i] * (1 + ((other_values[i] / 100)/50)))
print (values)
并提供所需的输出。
当期望将其转换为列表时,我遇到的问题是它输出以下内容:
list index out of range
这是我尝试过的:
values=[5]
values=[values[i] * (1 + ((other_values[i] / 100) / 360)) for i in range(len(other_values)) ]
背后的逻辑是遍历值中的最后一个值并应用该函数并将其添加到以5开头的值列表中
答案 0 :(得分:1)
您的列表理解方法不起作用,因为值列表不会在每一步都更新,而只会在最后更新。结果,当您寻找value[2]
的地方value = [5]
(因为它没有被更新)时,它将返回错误,因为您正在寻找不存在的元素的值。如果我是您,我会坚持使用for循环,这种情况下这种循环更为简单。
如果您想使用列表理解来简化代码,则此代码应该有效
import numpy as np
other_values=[0, 3, 4, 5, 3, 2]
5 * np.cumprod([1 + val /500 for val in other_values])
答案 1 :(得分:1)
您可以使用itertools.accumulate
(doc):
from itertools import accumulate
other_values=[3,4,5,3,2]
values = list(accumulate([5] + other_values, lambda a, b: a * (1 + ((b / 100)/50))))
print(values)
打印:
[5, 5.003, 5.007002399999999, 5.012009402399999, 5.015016608041439, 5.017022614684655]