2010-05-08 2 views
1

Как бы вы описали понимание списков в python для генерации серии n-1 deltas между n элементов в упорядоченном списке?Упорядочить по спискам в deltas

Пример:

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

Какая версия Python? –

ответ

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

recipes раздел itertools documentation включает исходный код для функции называется попарно, которые вы можете использовать для этой цели:

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 –

+2

Мне не нравится ненужное дублирование исходного списка. –

Смежные вопросы