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)))
  • 相关阅读:
    Jzoj4721 LCS
    Jzoj4721 LCS
    Bzoj3196 二逼平衡树
    Bzoj3196 二逼平衡树
    Jzoj4715 树上路径
    Jzoj4715 树上路径
    031下一个排列
    汉诺塔问题【递归】
    求全排列和组合问题
    030串联所有单词并匹配
  • 原文地址:https://www.cnblogs.com/marton/p/10772174.html
Copyright © 2011-2022 走看看