Python: доступ к объекту итератора в циклах for - PullRequest
4 голосов
/ 13 февраля 2011

Я хочу явно включить итератор цикла внутри цикла.Есть ли более приятный способ сделать это, чем:

idx = iter(range(0, 10))

for i in idx:
   print i

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

Редактировать: Я хотел бы узнать, есть ли способ получить доступ к циклу-итератору, кроме как определить его явно какв моем примере.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 13 февраля 2011
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
0 голосов
/ 13 февраля 2011

Вы можете определить генератор для вывода элементов из итератора по отдельности или парами. Это делает цикл for красивым и простым, изолируя логику фильтрации в генераторе.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...