如何從列表中迭代重疊的值對
在 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中文網其他相關文章!