迭代器

STL : 反向迭代器(Reverse Iterator)

女生的网名这么多〃 提交于 2019-12-27 04:04:32
1. 定义 反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而--运算则访问下一个元素。 2. 作用 (1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向遍历流,因此流迭代器不能创建反向迭代器。 (2)可以通过reverse_iterator::base()将反向迭代器转换为普通迭代器使用,从逆序得到普通次序。这是因为:有些容器的成员函数只接受iterator类型的参数,所以如果你想要在ri所指的位置插入一个新元素,你不能直接这么做,因为vector的insert函数不接受reverse_iterator。如果你想要删除ri 所指位置上的元素也会有同样的问题。erase成员函数会拒绝reverse_iterator,坚持要求iterator。为了完成删除和一些形式的插入操作,你必须先通过base函数将reverse_iterator转换成iterator,然后用iterator来完成工作。 3. 例子 1 void test_reverse() 2 { 3 int a[] = {-2, -1, 0, 1, 2, 3, 4}; 4 std

Python 基础 -2.4.3 迭代器

折月煮酒 提交于 2019-12-27 03:58:16
迭代器 = 循环 迭代器 我们已经知道,可以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。 可以使用 isinstance() 判断一个对象是否是 Iterable 对象: >>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。 *可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。 可以使用isinstance(

Python基础知识之迭代器

会有一股神秘感。 提交于 2019-12-27 03:56:33
我们已经知道,可以直接作用于·for·循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 generator ,包括生成器和带 yield 的 generator function 。 这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。 可以使用 isinstance() 判断一个对象是否是 Iterable 对象: >>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False 而生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。 可以被next()函数调用并不断返回下一个值的对象称为迭代器: Iterator 可以使用`isinstance()`判断一个对象是否是

(十二)python3 迭代器

≯℡__Kan透↙ 提交于 2019-12-27 03:52:57
可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等,一类是 generator ,包括生成器和带 yield 的 generator function。   可以使用 isinstance() 判断一个对象是否是 Iterable 对象:   >>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False 迭代器(Iterator):可以被 next() 函数调用并不断返回下一个值的对象称为迭代器 >>> from collections import Iterator >>> isinstance((x for x in range(10)), Iterator) True >>> isinstance([], Iterator) False >>> isinstance({

迭代器和生成器

情到浓时终转凉″ 提交于 2019-12-27 03:50:39
迭代器和生成器 迭代和可迭代 什么是迭代(iteration)? 如果给定一个list或tuple,我们要想访问其中的某个元素,我们可以通过下标来,如果我们想要访问所有的元素,那我们可以用for循环来遍历这个list或者tuple,而这种遍历我们就叫做迭代。 可迭代(iterable)? 其实你已经知道,不是所有的数据类型都是可迭代的。那么可迭代的数据类型都有什么特点呢? print(dir([1,2])) print(dir((2,3))) print(dir({1:2})) print(dir({1,2})) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '_

Python迭代器和生成器

孤人 提交于 2019-12-27 03:48:19
一、 楔子 假如我现在有一个列表l=['a','b','c','d','e'],我想取列表中的内容,有几种方式? 首先,我可以通过索引取值l[0],其次我们是不是还可以用for循环来取值呀? 你有没有仔细思考过,用索引取值和for循环取值是有着微妙区别的。 如果用索引取值,你可以取到任意位置的值,前提是你要知道这个值在什么位置。 如果用for循环来取值,我们把每一个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个直接去取其他位置的值。 但你有没有想过,我们为什么可以使用for循环来取值? for循环内部是怎么工作的呢? 二、迭代器 2.1 python中的for循环 要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable 看,报错了!报了什么错呢?“TypeError: 'int'

18、迭代器和生成器

别等时光非礼了梦想. 提交于 2019-12-27 03:47:32
迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 1、处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕(使用生成器) 2、 批量处理文件,用户指定要查找的目录和内容,将本层目录下所有文件中包含要查找内容的每一行都输出到屏幕 本篇导航: 可迭代的 迭代器 生成器 列表推导式和生成器表达式 一、可迭代的 for i in 50: print(i) #运行结果: # Traceback (most recent call last): # File "G:/python/python代码/八月/day2 迭代器生成器/3迭代器.py", line 8, in <module> # for i in 50: # TypeError: 'int' object is not iterable 报错: TypeError: 'int' object is not iterable 类型报错:'int'对象是不可迭代的 何为迭代? iterable: 可迭代的;迭代的; 可迭代的:从上面代码可以简单分析出能被for循环取值的就是可迭代,那么我们就可以初步总结出可迭代的类型: str、list、tuple、set、dict 可迭代的 ——对应的标志 拥有__iter__方法 print('__iter__' in dir([1,2,3]))

Python-装饰器、生成器

限于喜欢 提交于 2019-12-27 03:46:50
python中的for循环 for i in [1,2,3,4]: print(i) 正常可运行的,但是如下运行呢? for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable 看,报错了!报了什么错呢?“TypeError: 'int' object is not iterable”,说int类型不是一个iterable。 说明int数据类型并不是一个可迭代类型 字符串、列表、元组、字典、集合 都可以被for循环,说明他们 都是可迭代的 。 让我们导入模块试验一下: from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4} s = {1,2,3,4} print(isinstance(l,Iterable)) print(isinstance(t,Iterable)) print(isinstance(d,Iterable)) print(isinstance(s,Iterable)) 迭代器协议

python函数-迭代器&生成器

只谈情不闲聊 提交于 2019-12-27 03:45:11
python函数-迭代器&生成器 一、迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议:     ① 协议内容:内部实现__iter__方法     ② 验证方法:dir()方法。通过dir()方法查看是否含有__iter__方法     ③ __iter__方法的作用:可迭代的数据类型执行__iter__方法后会生成一个迭代器对象 print([1,2].__iter__()) 结果 <list_iterator object at 0x1024784a8> 2 迭代器协议   1 引出 ''' dir([1,2].__iter__())是列表迭代器中实现的所有方法,dir([1,2])是列表中实现的所有方法,都是以列表的形式返回给我们的,为了看的更清楚,我们分别把他们转换成集合, 然后取差集。 '''#实现的所有方法 print(dir([1,2].__iter__())) print(dir([1,2]))#取差集 print(set(dir([1,2].__iter__()))-set(dir([1,2]))) 结果: {'__length_hint__', '__next__', '__setstate__'}   我们看到在列表迭代器中多了三个方法,那么这三个方法都分别做了什么事呢? iter_l = [1,2

列表生成式,生成器和迭代器

ぐ巨炮叔叔 提交于 2019-12-27 03:43:43
1.列表生成式 语法:[条件表达式 for i in iterable] a=list(range(10)) b=[i+1 for i in a] #这种形式就是列表生成式 print(b) 用列表生成式可以简化代码,等价于下面的几种方法: 1 #方法一 2 a=list(range(10)) 3 b=[] 4 for i in a: 5 b.append(i+1) 6 7 print(b) 8 9 #方法二 10 a=list(range(10)) 11 for index,i in enumerate(a): 12 a[index]+=1 13 print(a) 14 15 #方法三 16 a=list(range(10)) 17 a=map(lambda a:a+1,a) #返回的是一个内存地址,想要调用需要用for循环 18 for i in a: 19 print(i) 2.生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中