我正在尝试找到一些代码,给定一个字符串,允许我使用for循环结构迭代每一行,但是添加了要求,单独的for循环结构不会将迭代重置回到开头
目前我有
sList = [line for line in theString.split(os.linesep)]
for line in SList
... do stuff
但是,连续的for循环会将迭代重置回到开头。
python中是否存在某些内容,或者我是否必须从头编写一个?
答案 0 :(得分:13)
只需使用生成器表达式(genexp)代替您现在使用的列表推导(listcomp) - 即:
sList = (line for line in theString.split(os.linesep))
这就是全部 - 如果你对你的代码感到满意(通过os.linesep分割,即使Python中的普通文本I / O已经将它们翻译成\n
...),所有你需要做的是使用圆括号(圆形)代替括号(方形),你将得到一个生成器而不是列表。
现在,每次你做for line in sList:
时,它会从前一个停止的位置开始(可能是因为break
) - 这就是你所要求的,对吧?
答案 1 :(得分:2)
使用另一个迭代器:
aList = range(10)
anIterator = iter(aList)
for item in anIterator:
print item
if item > 4: break
for item in anIterator:
print item
答案 2 :(得分:0)
尝试使用切片组合enumerate()
:
sList = theString.split(os.linesep)
for i, line in enumerate(sList):
if foo:
break
for j, line in enumerate(sList[i:]):
# do more stuff
答案 3 :(得分:0)
黑客攻击迭代器?
def iterOverList(someList):
for i in someList:
# Do some stuff
yield
然后在循环中调用iterOverList()几次,它会保留状态吗?