首頁 > 後端開發 > Python教學 > 如何在 Python 中有效地迭代列表值的重疊對(或 N 元素視窗)?

如何在 Python 中有效地迭代列表值的重疊對(或 N 元素視窗)?

Mary-Kate Olsen
發布: 2024-12-22 17:48:15
原創
385 人瀏覽過

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

迭代重疊的列表值對

迭代 Python 列表時,通常需要存取當前元素和後續元素。雖然使用 zip 函數對連續值進行配對是有效的,但可能還有更有效的方法。

使用pairwise() 函數

Python 3.8 提供了 itertools。 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 元素 Windows 的其他選項

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板