努力避免for循环

时间:2019-08-01 07:57:25

标签: python for-loop list-comprehension

我有以下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开头的值列表中

2 个答案:

答案 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.accumulatedoc):

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]