首頁 >後端開發 >Python教學 >如何有效地迭代 Python 列表中的重疊對(和三元組)?

如何有效地迭代 Python 列表中的重疊對(和三元組)?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 06:00:18853瀏覽

How to Efficiently Iterate Over Overlapping Pairs (and Triples) in Python Lists?

如何從列表中迭代重疊的值對

在 Python 中使用列表時,通常需要成對迭代值。常見的方法是使用以下構造:

for current, next in zip(the_list, the_list[1:]):
    # Do something

雖然此程式碼有效,但有一個更慣用且更有效的解決方案,使用 itertools 模組中的pairwise 函數。這是修訂後的 Python 3.8 實作:

import itertools

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

對於 Python 2,使用 itertools.izip 而不是 zip(因為 Python 2 中的 zip 建立一個列表而不是惰性迭代器)。

成對函數的工作原理是建立兩個平行迭代器 a 和 b,指向同一個第一個元素。然後使用 next 將 b 向前推進一步。 izip 函數將兩個迭代器中的元素組合起來形成重疊對。

這種方法也可以推廣到處理較大的值「視窗」。例如,要迭代三元組的值,請使用以下函數:

def threes(iterator):
    "s -> (s0, s1, s2), (s1, s2, s3), (s2, s3, 4), ..."
    a, b, c = itertools.tee(iterator, 3)
    next(b, None)
    next(c, None)
    next(c, None)
    return zip(a, b, c)

警告: 需要注意的是,如果其中一個迭代器由於以下原因而比其他迭代器前進得更遠,請務必注意:使用next,該實作會將消耗的元素保留在記憶體中,直到所有迭代器都消耗它們。

以上是如何有效地迭代 Python 列表中的重疊對(和三元組)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn