2015-09-14 515 views
1

我正在嘗試將列表中的值(如[1,2,3])相減並將它們相減。所以它會返回[-1,-1],因爲第一個值是1-2,第二個值是2-3。我將如何在Python中實現這一點?我試過如何從python中的列表中的前一個值減去值?

[x-y for (x,y) in list] 

但是這給出'需要多個值來解開錯誤'。

+2

如果你的列表被稱爲'list'那麼你有一個以上的問題。但是嘗試使用'range'來按位置訪問元素,而不是直接在列表中循環。 – Serdalis

回答

3

這不是一個好主意,影着內置list,所以我通過izipping與本身的列表中,由一個指數偏移這裏

[x - y for x, y in zip(the_list, the_list[1:])] 
+0

這工作謝謝! – Jared

2

您可以使用列表理解,但指定range從1開始到列表的末尾(或可選擇地從零開始1減去列表的長度):

lst = [1, 2, 3] 
>>> [lst[i - 1] - lst[i] for i in range(1, len(lst))] 
[-1, -1] 
+0

我得到了typeerror支持類型 - :int和list? – Jared

+0

使用Python 2.7.10適合我。你正在使用哪個版本? – Alexander

+0

@Jared:這個錯誤表明你可能有一個錯字,你可能會試圖「減去」列表和索引偏移量。 – ely

3

您還可以使用創造了一個發電機改變了你的變量名稱。

from itertools import izip, islice 
[x - y for x,y in izip(lst, islice(lst, 1, None))] 

這是方便的,如果由於某種原因,lst本身就是一個發電機,否則不容易檢查其長度時間提前,或者你只是不想直接使用它。

1

如果你能夠使用numpy.diff,這是很簡單的:

In [22]: import numpy as np 

In [23]: -np.diff([1,2,3]) 
Out[23]: array([-1, -1]) 

In [24]: -np.diff([1,2,4,3]) 
Out[24]: array([-1, -2, 1]) 
相關問題