如何对迭代器做切片操作
问题举例
读取某个文件内容的100~300行内容,我们是否可以使用
类似列表切片的方式得到一个100~300行文件内容的生成器
分析
列表的切片操作其实是在重载方法__getItem__方法
可以通过file.readlines()后再做切片,内存会加载整个文件到内存,如果文件太大,会浪费内存空间
解决思路
使用itertools.isslice,它能返回一个迭代器对象切片的生成器
代码
from itertools import islice f = open('test.txt') for line in islice(f, 100-1, 300): print(line)
前面100行也要读进来
自己实现一个islice
from itertools import islice def my_islice(iterable, start, end, step=1): tmp = 0 for i, x in enumerate(iterable): if i >= end: break if i >= start: if tmp == 0: tmp = step yield x tmp -= 1 print(list(my_islice(range(100, 150), 10, 20, 3))) print(list(islice(range(100, 150), 10, 20, 3)))