python迭代-如何对迭代器做切片操作

如何对迭代器做切片操作

问题举例

读取某个文件内容的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)))

 

posted @ 2019-04-26 07:04  可口可乐嗨  阅读(344)  评论(0编辑  收藏  举报
levels of contents