1

我正在做一些回报计算,我想尽可能优雅地做下面的事情,但我对列表理解的了解还不够好。(列表 x 可以是任意长度,不仅仅是 4 个元素,元素是浮点数)。

x = [a, b, c, d]
y = [(a-b)/b, (b-c)/c, (c-d)/d]

谢谢!

4

4 回答 4

3

这似乎是合理的,不是吗?

>>> x = [1.,2.,3.,4.]
>>> [ ((e-f)/f) for e,f in zip ( x[:-1], x[1:]) ]
[-0.5, -0.3333333333333333, -0.25]
于 2012-10-13T15:09:59.937 回答
3

列表理解并不总是最好的方法,它只是一种语法捷径,旨在让代码更简洁。对于像您这样的复杂操作,我建议您采用旧方式。根据经验,我一直认为,如果你很难写,其他人肯定很难读。

无论如何,这里有两种可能的方法:

使用列表推导的 Pythonic 方式:

y = [(x[i] - x[i + 1]) / x[i + 1] for i in xrange(len(x - 1))]

老套路:

y = []
for i in range(len(x - 1)):
    a = x[i]
    b = x[i + 1]
    y.append((a - b) / b)
于 2012-10-13T15:11:23.337 回答
1

您可以zip按照其他人的建议使用,或者

[(x[i]-x[i+1])/x[i+1] for i in range(len(x)-1)]
于 2012-10-13T15:11:37.343 回答
0

尝试这个:

y = [(x[i-1]-x[i])/x[i] for i in range(1,len(x))]

希望这可以帮助!

于 2012-10-13T15:19:55.307 回答