对迭代器进行切片

直接对迭代器进行切片是不能完成的,例如

l=range(20)
l= iter(l)
l1=l[5:10]

#TypeError: ‘range_iterator‘ object is not subscriptable

此时会报错,那么如果确实需要对迭代器进行切片呢?

#!/usr/bin/env python
#coding:utf-8
#@Author:Andy
# Date: 2017/6/11

from itertools import islice

l = range(20)
l = iter(l)

t = islice(l,5,10) # 第一个参数指定迭代对象,后面分别为起始,终止,步长
for i in t:
	print(i)

但是一定要注意,islice会将前面已经迭代的项消耗掉,类似于文件中的指针,当迭代到某一个地方,seek的位置是改变了的

例如,如果紧接着上面的运行结束后,再次运行下面的代码,继续迭代l,

for j in l:
	print(j)

它是紧接着刚才的迭代结束位置迭代的,看上去就像将之前的结果消耗掉了。

时间: 2024-08-27 04:26:14

对迭代器进行切片的相关文章

还有这种操作?异步迭代器的切片操作!!!

问题引出 对于同步中的迭代器我们可以使用itertools的islice模块来实现 # -*- coding: utf-8 -*- # @Time : 2019/1/2 11:52 AM # @Author : cxa # @File : 切片.py # @Software: PyCharm from itertools import islice la = (x for x in range(20)) print(type(la)) for item in islice(la, 5, 9):

Python进阶:迭代器与迭代器切片

Python进阶:迭代器与迭代器切片 在前两篇关于 Python 切片的文章中,我们学习了切片的基础用法.高级用法.使用误区,以及自定义对象如何实现切片用法(相关链接见文末).本文是切片系列的第三篇,主要内容是迭代器切片. 迭代器是 Python 中独特的一种高级特性,而切片也是一种高级特性,两者相结合,会产生什么样的结果呢? 1.迭代与迭代器 首先,有几个基本概念要澄清:迭代.可迭代对象.迭代器. 迭代 是一种遍历容器类型对象(例如字符串.列表.字典等等)的方式,例如,我们说迭代一个字符串"a

Python学习笔记——迭代器和生成器

1.手动遍历迭代器 使用next函数,并捕获StopIteration异常. def manual_iter(): with open('./test.py') as f: try: while True: line = next(f) print line except StopIteration: pass next函数也可以指定值来标记结尾 def manual_iter(): with open('./test.py') as f: try: while True: line = nex

Python进阶:全面解读高级特性之切片!

导读:切片系列文章连续写了三篇,本文是对它们做的汇总.为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动,如此一来,本文结构的完整性与内容的质量都得到了很好的保证. 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理

精密解析Python切片的用法

众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象.通常来说,切片的作用就是截取序列对象,然而,对于非序列对象,我们是否有办法做到切片操作呢?在使用切片的过程中,有什么要点值得重视,又有什么底层原理值得关注呢?本文将主要跟大家一起来探讨这些内容,希望我能与你共同学习进步. 学习Python中有不明白推荐加入交流

Python切片功能剖析

引用文章:https://mp.weixin.qq.com/s/NZ371nKs_WXdYPCPiryocw 切片基础法则: (1)公式[i : n : m],i为起始位置索引(当i为首位0可省略),i+n为结束位置索引(当n为长度len(li)可省略),m为步长,默认1,禁止0. (2)i, n同号:从序列的第i位索引起,向右取n-i位,按m间隔过滤. i, n异号:从序列的第i位索引起,向右取(len(list)-n)-i位,按m间隔过滤. 切片法则推导: (1)当m>0,且 i>0 时:

python 相见恨晚的itertools库

itertools库 迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(list)来说,迭代器最大的优势就是延迟计算,按需使用,从而提高开发体验和运行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器. 话虽这么说但大家平时用到的迭代器大概只有range了,而通过iter函数把列表对象转化为迭代器对象又有点多此一举,这时候我们今天的主角itertools就该上场了. 使用itertools itertools中的函数大多是返回各种迭代器对

python基础一 ------利用生成器生成一个可迭代对象

#利用生成器生成一个可迭代对象#需求:生成可迭代对象,输出指定范围内的素数,利用生成器产生一个可迭代对象#生成器:本身是可迭代的,只是 yield 好比return返回,yield返回后函数冻结状态,当再次调用时从冻结状态开始 1 class PrintNumbers(object): 2 """docstring for PrintNumbers""" 3 def __init__(self, start,end): 4 self.start

Python Cookbook(第3版)中文版pdf

下载地址:网盘下载 内容简介  · · · · · · <Python Cookbook(第3版)中文版>介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字.日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测试.调试以及异常,C语言扩展等. 本书覆盖了Python应用中的很多常见问题,并提出了通用的解决方案.书中包含了大量实用的编程技巧和示例代码,并在Py