在python的for循环的最后一次迭代期间执行操作

zak*_*191 3 python for-loop

我有一个解析文本文件行的循环:

for line in file:
    if line.startswith('TK'):
        for item in line.split():
            if item.startwith('ID='):
                *stuff*
            if last_iteration_of_loop
                *stuff*
Run Code Online (Sandbox Code Playgroud)

我需要做一些任务,但我不能这样做,直到第二个for循环的最后一次迭代.有没有办法检测到这一点,或者知道我是否在最后一项line.split()?作为一个注释,item第二个for循环中的s是字符串,我在运行时它们的内容是未知的,所以我不能寻找一个特定的字符串作为标志让我知道最后.

谢谢!

Mar*_*ers 8

只需参考for循环外的最后一行:

for line in file:
    if line.startswith('TK'):
        item = None
        for item in line.split():
            if item.startwith('ID='):
                # *stuff*

        if item is not None:
            # *stuff*
Run Code Online (Sandbox Code Playgroud)

item变量仍然是可用的外部for循环:

>>> for i in range(5):
...     print i
... 
0
1
2
3
4
>>>  print 'last:', i
last: 4
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的文件为空(不会在循环中进行迭代),item则不会设置; 这就是为什么我们item = None在循环之前设置并测试if item is not None之后的原因.

如果您必须拥有与测试匹配最后一项,请将其存储在新变量中:

for line in file:
    if line.startswith('TK'):
        lastitem = None
        for item in line.split():
            if item.startwith('ID='):
                lastitem = item
                # *stuff*

        if lastitem is not None:
             # *stuff*
Run Code Online (Sandbox Code Playgroud)

演示第二种选择:

>>> lasti = None
>>> for i in range(5):
...     if i % 2 == 0:
...         lasti = i
...
>>> lasti
4
Run Code Online (Sandbox Code Playgroud)

  • `else`到`for`循环完全没有意义,循环中没有`break`语句. (4认同)