>백엔드 개발 >파이썬 튜토리얼 >Python에서 목록 값의 겹치는 쌍(또는 N 요소 창)을 효율적으로 반복하려면 어떻게 해야 합니까?

Python에서 목록 값의 겹치는 쌍(또는 N 요소 창)을 효율적으로 반복하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-22 17:48:15336검색

How Can I Efficiently Iterate Over Overlapping Pairs (or N-element Windows) of List Values in Python?

겹치는 목록 값 쌍 반복

Python 목록을 반복할 때 현재 요소와 후속 요소 모두에 액세스해야 하는 경우가 많습니다. 연속된 값을 쌍으로 묶는 데 zip 함수를 사용하는 것이 효과적이지만 더 효율적인 접근 방식이 있을 수 있습니다.

pairwise() 함수 사용

Python 3.8은 itertools를 제공합니다. iterable의 연속 요소를 쌍으로 연결하는 pairwise() 함수:

import itertools

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

이 함수 입력 반복 가능 항목의 첫 번째 요소를 가리키는 두 개의 반복자 a와 b를 만듭니다. b는 한 단계 발전하여 a는 현재 요소를 가리키고 b는 다음 요소를 가리킵니다. 그런 다음 zip을 사용하여 두 반복기의 요소를 쌍으로 연결합니다.

사용 예:

the_list = ['a', 'b', 'c', 'd']

for current, next in pairwise(the_list):
    print(current, next)

# Output:
# a b
# b c
# c d

주의 사항:

pairwise()는 반복 가능한 항목을 여러 번 반복하여 작동한다는 점에 유의하는 것이 중요합니다. 즉, 하나의 반복기가 다른 반복기보다 훨씬 빠르게 진행되는 경우 구현 시 소비된 요소를 모든 반복기가 사용할 수 있도록 메모리에 유지할 수 있습니다.

N 요소 창에 대한 기타 옵션

pairwise() 함수를 확장하여 임의 크기의 창을 만들 수 있습니다.

def n_wise(iterable, n):
    "s -> (s0, s1, ..., s(n-1)), (s1, s2, ..., s(n)), ..."
    iterators = itertools.tee(iterable, n)
    for i in range(1, n):
        next(iterators[i], None)
    return zip(*iterators)

예를 들어 다음과 같습니다. 목록에서 트리플을 반복합니다:

for triplet in n_wise(the_list, 3):
    print(*triplet)

# Output:
# a b c
# b c d

결론:

zip을 사용하여 겹치는 쌍을 반복하는 전통적인 방법이 실행 가능하지만 pairwise() 및 n_wise는 기능은 모든 크기의 창에서 동일한 결과를 얻을 수 있는 간결하고 효율적인 방법을 제공합니다.

위 내용은 Python에서 목록 값의 겹치는 쌍(또는 N 요소 창)을 효율적으로 반복하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.