如何对迭代器做切片操作
问题举例
读取某个文件内容的 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)))
来源: http://www.bubuko.com/infodetail-3036151.html