gpt4 book ai didi

python - 在 Python 生成器中反转 next()

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:17 25 4
gpt4 key购买 nike

假设我们有以下代码:

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

关于python - 在 Python 生成器中反转 next(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55480849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com