好吧——晚了两年——但我遇到了这个问题,没有找到任何令我满意的答案。提出了这个元生成器:class Peekorator(object):
def __init__(self, generator):
self.empty = False
self.peek = None
self.generator = generator
try:
self.peek = self.generator.next()
except StopIteration:
self.empty = True
def __iter__(self):
return self
def next(self):
"""
Return the self.peek element, or raise StopIteration
if empty
"""
if self.empty:
raise StopIteration()
to_return = self.peek
try:
self.peek = self.generator.next()
except StopIteration:
self.peek = None
self.empty = True
return to_return
def simple_iterator():
for x in range(10):
yield x*3
pkr = Peekorator(simple_iterator())
for i in pkr:
print i, pkr.peek, pkr.empty
结果:0 3 False
3 6 False
6 9 False
9 12 False
...
24 27 False
27 None False
也就是说,在迭代过程中,您随时可以访问列表中的下一项。