gpt4 book ai didi

python - 如何使用特定的迭代器开始循环

转载 作者:行者123 更新时间:2023-11-28 23:01:49 34 4
gpt4 key购买 nike

我想在几个循环中遍历一个列表,总是从最后一个循环的项目开始:

import itertools as it
list1=[1,2,3,4,5,6,7,8]
a=iter(list1)
while a.next()!= 8:
a,b=it.tee(a) #copy the iterator
while b.next()!=8:
b,c=it.tee(b)
while c.next()!=8:
print "yaaay"

在这段代码中,我可以使用外循环的当前迭代器开始我的循环。如何在不使用 slice 的情况下以更 pythonic 的方式做到这一点?

这是我正在考虑的更 pythonic 方式的示例:

list1=[1,2,3,4,5,6,7,8]
a=iter(list1)
for k1 in list1:
for k2=k1 in list1:
for k3=k2 in list1:
print "yaaay"

最佳答案

据我了解,您正在寻找在某个时候“保存”生成器状态然后“恢复”它的方法。使用 tee 是正确的想法,PEP 0323有更多关于此的信息。

import itertools

lst = range(10)
it = iter(lst)

while True:
print it.next(), '>>',
it, saved = itertools.tee(it)
for subitem in it:
print subitem,
it = saved
print

更新:

import itertools

class fancy_it(object):
stack = []

def __init__(self, iterable=None):
if not iterable:
prev = fancy_it.stack[-1]
prev.it, iterable = itertools.tee(prev.it)
self.it = iter(iterable)

def __iter__(self):
fancy_it.stack.append(self)
try:
while True:
yield self.it.next()
except StopIteration:
fancy_it.stack.pop()
raise StopIteration


for x in fancy_it(range(10)):
print x
for y in fancy_it():
print '**', y
for z in fancy_it():
print '****', z

关于python - 如何使用特定的迭代器开始循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566890/

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