如何使用缓冲区遍历字符串(Python)
我正在寻找一些代码,想要实现的是给定一个字符串后,能够使用for循环逐行遍历,但有个额外的要求,就是不同的for循环不会把遍历重置回开头。
目前我有
sList = [line for line in theString.split(os.linesep)]
for line in SList
... do stuff
但是连续的for循环会把遍历重置回开头。
在Python中有没有这样的功能,还是我需要从头开始自己写一个?
4 个回答
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
13
只需使用生成器表达式(genexp),而不是你现在使用的列表推导式(listcomp)就可以了,也就是说:
sList = (line for line in theString.split(os.linesep))
就这么简单——如果你对你的代码其他部分满意(比如用 os.linesep 来分割,尽管在 Python 中正常的文本输入输出已经把它们转换成了 \n
...),你只需要把方括号(即 [])换成圆括号(即 ()),这样你就会得到一个生成器,而不是一个列表。
现在,每次你执行 for line in sList:
时,它都会从上一次停止的地方继续(可能是因为有一个 break
),这正是你想要的,对吧?
2
使用另一个迭代器:
aList = range(10)
anIterator = iter(aList)
for item in anIterator:
print item
if item > 4: break
for item in anIterator:
print item