在Python中如何用相同项循环迭代?
在编程中,有一个常见的任务就是在没有收到下一个项目时进行循环迭代。举个例子:
for sLine in oFile :
if ... some logic ... :
sLine = oFile.next()
... some more logic ...
# at this point i want to continue iteration but without
# getting next item from oFile. How can this be done in python?
8 个回答
2
你可以自己创建一个迭代器,这样你就可以把数据放回流的前面,这样你就可以让循环重复显示你想要的那一行:
next_lines = [] def prependIterator(i): while True: if next_lines: yield(next_lines.pop()) else: yield(i.next()) for sLine in prependIterator(oFile): if ... some logic ... : sLine = oFile.next() ... some more logic ... # put the line back so that it gets read # again as we head back up to the "for # statement next_lines.append(sLine)
如果prepend_list从来没有被修改过,那么这个prependIterator的行为就和它接收到的那个迭代器完全一样:里面的if语句总是会返回False,它只会把传入的迭代器中的所有内容逐个输出。但是如果在迭代的过程中,prepend_list被添加了新的项目,那么这些新项目会优先被输出,然后才会继续读取主迭代器中的内容。
3
我开始以为你想用的是 continue
这个关键词,但这样的话你会直接跳到下一行输入。
我有点困惑。当你在循环读取文件的每一行时,如果不获取新的一行,循环到底应该怎么继续呢?
你是想再检查一下这一行吗?如果是这样,我建议你可以加一个内部循环,让它一直运行,直到你觉得这一行处理完了。然后你可以用 break
来跳出这个循环,或者用 while
条件和一个标志变量来结束循环。
1
你需要的是一个简单、确定性的有限状态机。就像这样……
state = 1
for sLine in oFile:
if state == 1:
if ... some logic ... :
state = 2
elif state == 2:
if ... some logic ... :
state = 1