• 问题12:如何对迭代器做切片操作


    问题12:如何对迭代器做切片操作

     

    方案

    方案一:可以使用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
  • 相关阅读:
    Hbase数据备份&&容灾方案
    maven 高级玩法
    Python操作MySQL -即pymysql/SQLAlchemy用法
    python
    Redis的AOF功能
    Redis的快照功能
    查看哪些进程占用了SWAP分区?
    Java进程CPU使用率高排查
    利用iptables实现基于端口的网络流量统计
    从free命令看Linux内存管理
  • 原文地址:https://www.cnblogs.com/valorchang/p/11434600.html
Copyright © 2020-2023  润新知