Python列表元素间操作 - 这可以通过列表理解来完成吗?

时间:2012-10-13 15:04:27

标签: python list

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

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

谢谢!

4 个答案:

答案 0 :(得分:3)

这似乎有道理,不是吗?

>>> x = [1.,2.,3.,4.]
>>> [ ((e-f)/f) for e,f in zip ( x[:-1], x[1:]) ]
[-0.5, -0.3333333333333333, -0.25]

答案 1 :(得分: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)

答案 2 :(得分:1)

您可以像其他人建议的那样使用zip,或

[(x[i]-x[i+1])/x[i+1] for i in range(len(x)-1)]

答案 3 :(得分:0)

试试这个:

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

希望这有帮助!