2015-09-14 433 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]) 
相关问题