2010-05-08 28 views
1

如何在python中编写列表推导,在有序列表中的n项之间生成一系列n-1增量?列出对三角洲系列的理解

示例:

L = [5,9,2,1,7] 
RES = [5-9,9-2,2-1,1-7] = [4,7,1,6] # absolute values 
+0

什么版本的Python? – 2010-05-08 10:57:34

回答

5
RES = [abs(L[i]-L[i+1]) for i in range(len(L)-1)] 
4

itertools documentationrecipes部分包括源代码的函数调用成对,你可以使用这个目的:

from itertools import * 

def pairwise(iterable): 
    "s -> (s0,s1), (s1,s2), (s2, s3), ..." 
    a, b = tee(iterable) 
    b.next() 
    return izip(a, b) 

您可以复制并粘贴到您的文件。有了这个功能定义这是很简单的事情,你想要什么:

l = [5, 9, 2, 1, 7] 
print [abs(a-b) for a,b in pairwise(l)] 

结果

[4, 7, 1, 6] 
2

就想通了:

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

对于大型列表,您可能需要使用itertools.izip而不是zip。 http://docs.python.org/library/itertools.html#itertools.izip – 2010-05-08 10:59:55

+2

我不喜欢不必要的重复的原始列表。 – 2010-05-08 11:06:32