我正在做一些返回計算,我想盡可能優雅地做下面的事情,但是我對列表理解的知識還不夠好。 (列表x可以是任何長度,不只是4個元素,元素是浮點數)。Python列表元素間操作 - 這可以通過列表理解來完成嗎?
x = [a, b, c, d]
y = [(a-b)/b, (b-c)/c, (c-d)/d]
謝謝!
我正在做一些返回計算,我想盡可能優雅地做下面的事情,但是我對列表理解的知識還不夠好。 (列表x可以是任何長度,不只是4個元素,元素是浮點數)。Python列表元素間操作 - 這可以通過列表理解來完成嗎?
x = [a, b, c, d]
y = [(a-b)/b, (b-c)/c, (c-d)/d]
謝謝!
這似乎是合理的,不是嗎?
>>> x = [1.,2.,3.,4.]
>>> [ ((e-f)/f) for e,f in zip (x[:-1], x[1:]) ]
[-0.5, -0.3333333333333333, -0.25]
對我來說太快了。 :^) – DSM
@DSM lol;即使是同樣的例子!你不必刪除它,但是 - 你有一些很好的解釋! –
列表理解並不總是最好的方法,而只是一個語法快捷方式,旨在使代碼更簡潔。 對於像你這樣複雜的操作,我會建議採用舊的方式。作爲一個經驗法則,我一直認爲,如果你很難寫出它,其他人肯定會很難閱讀它。
無論如何,這裏是這樣做的兩種可能的途徑:
的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)
啊!打我16秒。 +1,仍然 – inspectorG4dget
您可以使用其他人建議的zip
,或
[(x[i]-x[i+1])/x[i+1] for i in range(len(x)-1)]
它應該是xrange(len(x) - 1)=> 0 .. x-2我認爲 –
@lcfseth:你是對的。答案已更新 – inspectorG4dget
試試這個:
y = [(x[i-1]-x[i])/x[i] for i in range(1,len(x))]
希望這有助於!
你有測試用例嗎? –
@RudolfMühlbauer我嘗試了一個for循環,並得到它的工作,但它感覺'錯誤' – tfb
以您理解的方式編程永遠不會錯 - 很可能您的代碼將被具有Python媲美知識的人閱讀。雖然語言提供了很多快捷方式,但我通常更喜歡「更直觀」(直接)版本 - 以便於同事! –