[英]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.