从索引开始遍历 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):
...
如果我有一个很长的字符串(比如说 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):
...