如何使用缓冲区遍历字符串(Python)

3 投票
4 回答
4510 浏览
提问于 2025-04-15 17:13

我正在寻找一些代码,想要实现的是给定一个字符串后,能够使用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

撰写回答