индексируйте список в Python для цикла

Я делаю для цикла в для цикла. Я - цикличное выполнение через список и нахождение определенной строки, которая содержит образец регулярного выражения. После того как я нахожу строку, я должен искать для нахождения следующей строки определенного шаблона. Я должен сохранить обе строки, чтобы смочь проанализировать время для них. Я создал в противоречии с, отслеживают индекс списка как внешнее для работ цикла. Я могу использовать конструкцию как это для нахождения второй строки, в которой я нуждаюсь?

 index = 0
 for lineString in summaryList:  
    match10secExp = re.search('taking 10 sec. exposure', lineString)
    if match10secExp:
       startPlate = lineString
       for line in summaryList[index:index+10]:
           matchExposure = re.search('taking \d\d\d sec. exposure', line)
           if matchExposure:
               endPlate = line
           break
    index = index + 1

Выполнения кода, но я не получаю результат, который я ищу.

Спасибо.

1
задан Hannah 23 June 2010 в 21:17
поделиться

2 ответа

В зависимости от ваших конкретных потребностей вы можете просто использовать итератор в списке или два из них, как mae от itertools.tee . То есть, если вы хотите искать строки, следующие за первым шаблоном , только для второго шаблона, будет достаточно одного итератора:

theiter = iter(thelist)

for aline in theiter:
  if re.search(somestart, aline):
    for another in theiter:
      if re.search(someend, another):
        yield aline, another  # or print, whatever
        break

Это будет , а не поисковые строки из aline до концовки другой для somestart , только для someend . Если вам нужно искать их для обеих целей, то есть оставить сам theiter нетронутым для внешнего цикла, здесь может помочь tee :

for aline in theiter:
  if re.search(somestart, aline):
    _, anotheriter = itertools.tee(iter(thelist))
    for another in anotheriter:
      if re.search(someend, another):
        yield aline, another  # or print, whatever
        break

Это исключение из общего правила о tee , который приводится в документации:

После того, как tee () разделился, исходная итерация не должна использоваться где-нибудь еще; в противном случае итерируемый мог бы продвинуться без тройника информируемые объекты.

потому что продвижение theiter и продвижение anotheriter происходит в непересекающихся частях кода, а anotheriter всегда перестраивается заново, когда это необходимо (так что продвижение of theiter пока не имеет значения).

1
ответ дан 2 September 2019 в 23:33
поделиться
matchExposure = re.search('taking \d\d\d sec. exposure', lineString)

, вероятно, должно быть

matchExposure = re.search('taking \d\d\d sec. exposure', line)
1
ответ дан 2 September 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: