从索引开始遍历 python 个字符串

Iterate through python string starting at index

如果我有一个很长的字符串(比如说 1 亿个字符),有没有一种方法可以使用 for c in str: 之类的方法来遍历字符,但从中开始一定数量的字符?我不想对字符串进行切片并使用子集,因为我知道对字符串进行切片会生成一个副本(在我的情况下非常昂贵)。换句话说,我可以为字符串上的迭代器指定起点吗?

你可以使用字符串索引来完成它,就像它的列表:

for i in xrange(100, 200):
    print(s[i])

在 python3 range 中是生成器,而不是列表。这意味着以下代码不需要过多的内存:

for i in range(start_pos, len(my_string)):
   print(my_string[i])

如果您更愿意使用迭代器而不是 my_string,那么您需要自己编写:

def iter_starting_at(start_pos, string):
    for i in range(start_pos, len(string)):
        yield string[i]

for character in iter_starting_at(start_pos, my_string):
    print(character)

考虑使用 itertools.islice 如下:

from itertools import islice

for c in islice(my_str, start, stop):
    print(c)

我们可以使用 itertools.islice,而不是在字符串中生成索引,returns 一个切片上的迭代器。

for c in itertools.islice(my_enormous_string, start_pos):
    ...