zoukankan      html  css  js  c++  java
  • 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)))
  • 相关阅读:
    linux初始密码Mysql
    lamp整个打包
    模拟小球碰撞后返回
    Linux图形界面卡死
    非模态对话框
    菜单
    键盘消息简单示例
    菜单练习
    模态对话框练习
    阶段知识整合(画笔,画刷,字体)
  • 原文地址:https://www.cnblogs.com/marton/p/10772174.html
Copyright © 2011-2022 走看看