• Python:如何对迭代器做切片操作


    方案

    方案一:可以使用readlines()函数,将文件的每行分成一个列表:lines = f.readlines(),在对其进行切片:lines[100 : 300];

    #弊端:如果文本文件过大,则可能导致内存不足;

    方案二:使用标准库itertools下的islice方法;

    功能:islice(可迭代对象, [start, ]stop[, step]):对可迭代对象或迭代器做切片操作,返回一个可迭代的对象;

    参数:可迭代对象、起始值、终止值、步进值;

    # A、步进值:即每次迭代元素个数,或几行(对文件操作),默认为1;

    #B、起始值、终止值:元素序号;即,可指定需要迭代的元素范围;

    需求1:对文本文件的其中几行进行迭代操作;

    from itertools import islice
    f = open('文件路径'
    for i in islice(f, 100, 300, 2):
      print(i)

    # 2)迭代f文件,从开始到第300行,每1行迭代一次;
    for i in islice(f, 300):
      print(i)

    # 3)迭代f文件,从100行到结尾,每1行爹地啊一次;
    for i in islice(f, 100, None):
      print(i)

    #文件不支持反向引索,因为在未读完文件时,系统不知道文件结尾;
    for i in islice(f, 100, -100):
      print(i)

    需求2:对序列的迭代器进行迭代操作;

    form itertools import islice
    p = range(20)
    t = iter(p)
    
    for x in t:
    print(x)
    #输出:0 1 2 ... 19
    
    # 对6~10号元素进行迭代
    for x in islice(t, 5, 10):
    print(x)
    #输出:5 6 7 8 9
    
    #A、经过islice迭代后,迭代的元素被消耗,包含0~4,因为0~4也被islice迭代了,只是没被显示出来,islice要求在第6号元素处开始显示;
    #B、当再次t进行迭代时,前时号元素不再显示,因为被islice消耗;
    for x in t:
    print(x)
    #输出:10 11 12 13 14 15 16 17 18 19

    #islice只会消耗迭代器t的数据,不会消耗原序列;
    for x in p:
      print(x)
    #输出:0 1 2 ... 19
  • 相关阅读:
    捕获异常的两种方式Exception
    线程的随机性
    单例模式简单解析--Singleton 单例模式(懒汉方式和饿汉方式)
    LeetCode 116. 填充每个节点的下一个右侧节点指针
    LeetCode 129. 求根到叶子节点数字之和
    LeetCode 124. 二叉树中的最大路径和
    LeetCode 119. 杨辉三角 II
    LeetCode 118. 杨辉三角
    LeetCode 113. 路径总和 II
    LeetCode 114. 二叉树展开为链表
  • 原文地址:https://www.cnblogs.com/volcao/p/8758043.html
Copyright © 2020-2023  润新知