如何使用缓冲区迭代字符串(python)

时间:2009-12-20 23:46:44

标签: python string iteration buffer

我正在尝试找到一些代码,给定一个字符串,允许我使用for循环结构迭代每一行,但是添加了要求,单独的for循环结构不会将迭代重置回到开头

目前我有

sList = [line for line in theString.split(os.linesep)]
for line in SList
  ... do stuff

但是,连续的for循环会将迭代重置回到开头。

python中是否存在某些内容,或者我是否必须从头编写一个?

4 个答案:

答案 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()几次,它会保留状态吗?