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

リスト内包表記は常に最善の方法であるとは限らず、よりクリーンなコードを作成することを目的とした構文上のショートカットにすぎません。あなたのような複雑な操作には、古い方法をお勧めします。経験則として、あなたがそれを書くのに苦労するならば、他の人は確かにそれを読むのに苦労するだろうと私はいつも思います。

とにかく、これを行うための2つの可能な方法があります:

リスト内包表記を使用したPythonの方法:

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 に答える