Python生成器中的reverse next()
假设我们有以下代码:Python生成器中的reverse next(),python,for-loop,iterator,next,Python,For Loop,Iterator,Next,假设我们有以下代码: 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必须
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
必须保持为生成器(由于内存限制),并且不能用作反向(list(gen))
中的列表
当前的实现使迭代由于
next(gen)
而跳过数字。您可以使用itertools.tee
复制iterable,使用调用next
将复制的iterable替换为偏移量1,然后使用itertools.zip\u longest
将两个iterable配对进行迭代:
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
您是否需要
“下一项是:”,el
?(正如您所说,您需要打印这一行中可被3整除的元素)。是否可以打印出数字10的当前元素?