如何在Python循环中跳过当前项和下一项?

Ube*_*per 23 python

这可能是一个非常愚蠢的问题,但我在网上看了等等.并没有看到一个可靠的答案.

有没有一种简单的方法来做这样的事情?

lines = open('something.txt', 'r').readlines()
for line in lines:
    if line == '!':
        # force iteration forward twice
        line.next().next()
    <etc>
Run Code Online (Sandbox Code Playgroud)

在C++中很容易做到; 只需将迭代器增加一个额外的时间.在Python中有没有一种简单的方法可以做到这一点?

我只想指出,这个问题的主要目的不是"阅读文件等"和跳过事情.我更喜欢C++迭代器样式迭代.新标题也有点愚蠢,我真的不认为它反映了我的问题的本质.

ebo*_*ebo 34

尝试:

lines = iter(open('something.txt', 'r'))
for val in lines:
    if val == "!":
        lines.next()
        continue
    <etc>
Run Code Online (Sandbox Code Playgroud)

你可能想要赶上StopIteration某个地方.如果迭代器完成,就会发生这种情况.

  • 您可以使用`next(lines,None)`来抑制`StopIteration`异常.(需要Python 2.6) (7认同)

Oli*_*ier 9

这是短的,pythonic,并且工作:

with open('something.txt', 'r') as f: # or simply f = open('something.txt', 'r')
    nobang = (line for line in f if line != '!\n')
    for line in nobang:
        #...
Run Code Online (Sandbox Code Playgroud)

编辑:

许多人观察到,这还不是解决方案.我能想到的最好的结果是本页面已有的内容:

with open('something.txt', 'r') as f:
    for line in f:
        if line == '!\n':
            next(f,None) # consume next line
            continue # skip this line
        # ...
Run Code Online (Sandbox Code Playgroud)

  • 这不会跳过下一行. (3认同)

Dav*_*rby 8

file.readlines方法返回一个字符串列表,迭代列表将不允许您修改循环体中的迭代.但是,如果您先在列表中调用iter,那么您将获得一个可以在循环体中修改的迭代器:

lines = open('something.txt', 'r').readlines()
line_iter = iter(lines)
for line in line_iter:
    if line == '!':
        # force iteration forward twice
        line_iter.next()
        line_iter.next()
    <etc>
Run Code Online (Sandbox Code Playgroud)

正如ebo指出的那样,文件对象本身就是一个迭代器,所以你可以通过不调用readlines并省去对iter的调用来获得相同的效果.