Python 奋力向前以避免for循环

Python 奋力向前以避免for循环,python,for-loop,list-comprehension,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] va

我有以下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]
时,其中
值=[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])

你的清单理解方法不起作用,因为你的价值清单不是每一步都更新,而是最后才更新。因此,当您查找
值[2]
时,其中
值=[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])

您可以使用
itertools.accumulate
():

印刷品:

[5, 5.003, 5.007002399999999, 5.012009402399999, 5.015016608041439, 5.017022614684655]

您可以使用
itertools.accumulate
():

印刷品:

[5, 5.003, 5.007002399999999, 5.012009402399999, 5.015016608041439, 5.017022614684655]

你想描述一下你的逻辑吗?我想不出一个明智的方法来做你想做的事情。列表理解有自己的范围,因此在评估列表理解时,
不会被扩展。也没有理由有一个列表理解,它并不是天生的好;你在为自己制造问题。更好的修改是去掉
range(len())
并使用
enumerate
,这是因为循环会在每次迭代时向
值添加元素。列表理解只返回最后一个列表,在“它的眼睛”中,
values=[5]
贯穿整个过程Python是围绕一些原则构建的,其中之一是:可读性计数。你的公式本身就足够复杂了。如果你把它压缩到一个理解中,它将不再被认为是可读的。这样做只是为了得到滚动计算的最终元素吗?你想描述你的逻辑吗?我想不出一个明智的方法来做你想做的列表理解。列表理解有自己的范围,因此在评估列表理解时,
不会被扩展。也没有理由有一个列表理解,它并不是天生的好;你在为自己制造问题。更好的修改是去掉
range(len())
并使用
enumerate
,这是因为循环会在每次迭代时向
值添加元素。列表理解只返回最后一个列表,在“它的眼睛”中,
values=[5]
贯穿整个过程Python是围绕一些原则构建的,其中之一是:可读性计数。你的公式本身就足够复杂了。如果你把它压缩到一个理解中,它将不再被认为是可读的。你这样做只是为了得到最终的元素,这是滚动计算的结果吗?