2011-02-13 61 views
3

我想在循环内显式地执行循环迭代器。是否有一个“更好”的方式来做到这一点比:Python:访问for循环中的迭代器对象

idx = iter(range(0, 10)) 

for i in idx: 
    print i 

    if i == 5: 
     print "consuming %i in step %i" % (next(idx), i) 

编辑:我徘徊,如果有一种方式来获得访问除明确地将其定义为在我的例子以外的循环迭代器。

谢谢!

+3

出了什么问题`未来(IDX)`?它不够明确吗? – eumiro 2011-02-13 08:22:26

+0

@eumiro:如果`idx`不是迭代器(例如列表),则不行。在迭代器中迭代迭代器的`next`也是非常少见的做法。我强烈建议不要这样做。 – 2011-02-13 09:26:59

+0

我很担心循环的头部;通常会看到类似于'for i in range(0,10)` - 但之后我无法访问迭代器对象... – MrPugh 2011-02-13 13:34:53

回答

0

您可以定义一个生成器来单独或成对地从迭代器中生成元素。这使得for-loop变得简单易行,同时隔离了发生器中的过滤逻辑。

def my_filter(iterable): 
    result=[] 
    for i in iterable: 
     result.append(i) 
     if i==5: 
      continue 
     yield result 
     result=[]   

idx = iter(range(0, 10)) 

for i in my_filter(idx): 
    print i 
3
data = list(range(10)) 

it = iter(data) 
for i in it: 
    if i==5: 
     j = it.next() 
     print "Consuming {0},{1}".format(i,j) 
    else: 
     print i 

结果

0 
1 
2 
3 
4 
Consuming 5,6 
7 
8 
9