2015-01-22 3 views
-2

목록의 모든 쌍 사이에 차이점을 찾는 프로그램을 만들려고합니다. 예를 를 들어 [2,4,6] 는 할 수있는 방법이 있나요 목록의 차이 [2,2] 을 포함 만들 것이목록의 쌍에있는 Python 3.3 함수

+0

예, 분명히 * 이렇게 *하는 방법이 있습니다. 너 뭐 해봤 니? –

+1

투표가 중단되는 것을 피하려면 지금까지 시도한 코드가 작동하지 않는 경우에도 제공해야합니다. –

답변

3

Itertools Recipes : pairwise

from itertools import tee 

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

def diffs(iterable): 
    return [b - a for a, b in pairwise(iterable)] 

print(diffs([2,4,6])) 
2

[L[i+1] - L[i] for i in range(len(L)-1)] 것은 할 것 그것.

[L[i+1] - L[i] for i in range(len(L[:-1]))]

[L[i] - L[i-1] for i in range(1, len(L[1:]))]

map을 사용하여 : : 또한 지능형리스트를 사용하여

일부 다른 방법

list(map(lambda i: L[i+1]-L[i], range(len(L[:-1]))))

list(map(lambda i: L[i]-L[i-1], range(1, len(L[1:]))))

operator 모듈 사용 16,

:

list(map(operator.sub, L[1:], L[:-1]))

zip을 사용하여 (이 사람은 이모, 아마 가장 좋은 방법입니다) :

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

더 자세한 방법이없는 경우 목록 이해력에 익숙하거나 map (GET FAMILIAR!) :

그리고 발전기 사용하여 할 수있는 유사하지만 훨씬 더 좋은 방법 : 여기

def differences(L1,L2): 
    for V1,V2 in zip(L1,L2): 
     yield V2-V1 

diffs = list(differences(L[:-1],L[1:])) 

그리고 위의 발전기의 발전기 이해와 동일 (거의 정확하게 위의 마지막 지능형리스트와 동일합니다 통지 , 대신 브래킷의 목록 기능)를 사용 제외 :

list(V2-V1 for V1,V2 in zip(L[:-1],L[1:])) 

연구 매우 밀접하게 그 일을 당신은 파이썬의 많은 것을 배울 것입니다 이러한 방법을 모두.

+1

나는 당신이 '[L [i] - L [i-1] 범위 (1, len (L))]에있는 i를 의미한다고 생각합니다.' –

+1

그래, 그랬어! 감사. –