В зависимости от ваших конкретных потребностей, вы можете просто использовать итератор в списке или два из них как 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
до окончания another
для 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
всегдаперестраивается заново, когда это необходимо (поэтому повышение на theiter
пока не имеет значения).