Есть ли способ изменить итератор цикла for? - PullRequest
1 голос
/ 16 мая 2019

Я читаю строку файла на строку в цикле for и выполняю цикл while, модифицируя цикл для итератора, как показано ниже:

for line in archive:
    ...
    if re.search("{",line):
        while not re.search("}",line):
          ...
          line = next_line
    ...

Полный код ниже

import re

a = ["{\n","int b,c,d\n","#pragma omp parallel for\n","for (int i=0;i<10;i++)\n",'1\n','2\n','3\n','\n4',"}\n",'6','7','8','9','0','z','y']
listwh=[]
a_it=iter(a)
text =[]
flagcb=0
for j in a:
  print(j)
for line in a_it:  
  if re.search("{",line):

     flagcb=flagcb+line.count("{")-line.count("}")
     while(flagcb>0):
         listwh.append(line)
         print(flagcb)
         print(line)
         flagcb=flagcb+line.count("{")-line.count("}")
         line = next(a_it)
  text.append(line)  

for i in listwh:
  print(i)
print("\ninterval\n")
#for i in text:
#  print(i)

Мне нравится оставаться в цикле while, пока условие остановки, которое зависит от чтения архива.

1 Ответ

1 голос
/ 16 мая 2019

Вы можете создать итератор из вашей итерации явно:

archive_iter = iter(archive)

Тогда он останется между петлями.

for line in archive_iter:
    if '{' in line:
        while '}' not in line:
            line = next(archive_iter)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...