索引Python for循环中的列表

时间:2010-06-23 20:54:23

标签: python nested-loops

我在for循环中进行for循环。我循环遍历列表并查找包含正则表达式模式的特定字符串。一旦找到该线,我需要搜索以找到某个模式的下一行。我需要存储两行以便能够解析它们的时间。我创建了一个计数器来跟踪列表的索引号,因为外部for循环工作。我可以使用这样的结构来找到我需要的第二行吗?

 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

代码运行,但我没有得到我正在寻找的结果。

感谢。

2 个答案:

答案 0 :(得分:1)

matchExposure = re.search('taking \d\d\d sec. exposure', lineString)

应该是

matchExposure = re.search('taking \d\d\d sec. exposure', line)

答案 1 :(得分:1)

根据您的确切需要,您可以在列表中使用迭代器,或者使用itertools.tee中的两个作为mae。即,如果您想在第一个模式之后搜索第二个模式的行,则单个迭代器将执行:

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

这将alineanother的结尾somestartsomeend仅的搜索行。如果您需要为两个目的搜索它们,即保留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的推进在此期间不相关)。