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)))
  • 相关阅读:
    推箱子
    为textarea增加maxlength属性(转)
    validate
    keypress
    Knockout
    & replace &
    银联参数
    chinapay
    model binding
    JSON.stringify
  • 原文地址:https://www.cnblogs.com/marton/p/10772174.html
Copyright © 2011-2022 走看看