簡體   English   中英

在 Python 生成器中反轉 next()

[英]reverse next() in Python generator

假設我們有以下代碼:

gen = (x for x in range(11))

for el in gen:
    print("Printing current element: ", el) #1
    if el % 3 == 0:
        print("The next item is: ", next(gen)) #2

在這個例子中,我想在#1行打印生成器中的所有數字,另外在#2行打印那些可以被 3 整除的數字。 代碼必須使用按元素(而不是按索引)迭代。 還有一個限制是生成器gen必須保持一個生成器(由於內存限制)並且不能用作例如reversed(list(gen))

當前實現使迭代跳過數字由於next(gen)

您可以使用itertools.tee復制迭代,通過調用next將復制的迭代替換為 1 的偏移量,然后使用itertools.zip_longest將兩個迭代配對進行迭代:

from itertools import tee, zip_longest
gen = (x for x in range(11))
a, b = tee(gen)
next(b)
for el, n in zip_longest(a, b):
    print("Printing current element: ", el)
    if el % 3 == 0:
        print("The next item is: ", n)

這輸出:

Printing current element:  0
The next item is:  1
Printing current element:  1
Printing current element:  2
Printing current element:  3
The next item is:  4
Printing current element:  4
Printing current element:  5
Printing current element:  6
The next item is:  7
Printing current element:  7
Printing current element:  8
Printing current element:  9
The next item is:  10
Printing current element:  10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM