迭代器

可迭代(Interable),迭代器(Iterator),生成器(generator)的手记

本小妞迷上赌 提交于 2019-12-03 12:21:01
今天既然看到这里了,就做个笔记。这个玩意已经花过我很多时间。 可迭代对象只要有__iter__属性的都可以称呼可迭代(Interable)。 迭代器只要拥有__iter__与__next__属性就是迭代器(Iterator)。 Python里面可以通过iter方法生成迭代器(Iterator),iter(可迭代(Interable)) 生成器(generator),可以用简单生成器(i,for i in range(10)),写法跟列表生成器样式通用,把[]换成(), 还有可以通过自定义方法用yield生成。 生成器肯定是迭代器,更加是可迭代对象,生成器的功能是最多的 相对迭代器有三个生成器对象的专属方法: send throw close 简单的来说,迭代器只能从对象里面取值,生成器可以互动了,你还可以向对象里面送值。 yield,send,throw,close。我这里不写了,篇幅很长。 可以参考:https://blog.csdn.net/jpch89/article/details/87036970 一般用的最多也就yield及send,携程的时候要用。 还有可以通过自定义方法用yield生成。 [Hái yǒu kěyǐ tōngguò zì dìngyì fāngfǎ yòng yield shēngchéng.] There can be used a method

python基础08--迭代器,生成器

你说的曾经没有我的故事 提交于 2019-12-03 11:11:56
1.1 迭代器 1、 可迭代对象: str,list,tuple,set,dict, 迭代器: f( 文件 ) , range() 可迭代对象和迭代器都可以 for 循环 可迭代对象不会计数, 迭代器会计数,上面操作到第 3 个,则下面的程序继续使用第 4 个 以上数据类型中都有一个函数 __iter__() 所有包含了函数 __iter__() 的数据类型都是可迭代对象 Iterable 2、 获取迭代器 .__iter__ 迭代器往外拿元素 .__next__ lis = [1,2,3,4] it = lis.__iter__() #it 是迭代器 print(it.__next__()) # 打印第一个元素 print(it.__next__()) # 打印第二个元素 3、Iterable: 可迭代对象 内部包含 __iter__() Iterator: 迭代器 内部包含 __iter__() 和 __next__ from collections import Iterable # 可迭代的 from collections import Iterator # 迭代器 lis = [1,2,3,4] isinstence( 对象,类型 ) # 判断对象是否是这个类型 isinstence(lis,Iterable) # 判断是否是可迭代对象 isinstence(lis

set容器与map容器的简单应用

倾然丶 夕夏残阳落幕 提交于 2019-12-03 10:18:24
set容器中一些函数,取自百度其他大佬已总结好的,如有侵权,请联系删除! set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容器set成员函数:clear()--清除所有元素 c++ stl容器set成员函数:count()--返回某个值元素的个数 c++ stl容器set成员函数:empty()--如果集合为空,返回true c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器 c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器 c++ stl容器set成员函数:erase()--删除集合中的元素 c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器 c++ stl容器set成员函数:get_allocator()--返回集合的分配器 c++ stl容器set成员函数:insert()--在集合中插入元素 c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器 c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数 c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值 c++

C++ STL——常用算法

浪子不回头ぞ 提交于 2019-12-03 09:41:33
目录 一 常用查找算法 二 常用遍历算法 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 常用查找算法 /* find算法 查找元素 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param val 查找的元素 @return 返回查找元素的位置 */ find(iterator beg, iterator end, val); /* adjacent_find算法 查找相邻重复元素 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param _callback回调函数或者谓词(返回bool类型的函数对象) @return 返回相邻元素的第一个位置的迭代器 */ adjacent_find(iterator beg, iterator end, _callback); /* binary_search算法 二分查找算法 注意:在无序序列中不可用 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param val 查找的元素 @return 找到返回true,否则返回false */ bool binary_search(iterator beg, iterator end, val); /* find_if算法 条件查找 @param

C++ STL——string和vector

核能气质少年 提交于 2019-12-03 09:36:52
目录 一 STL基本概念 二 string容器 三 vector容器 3.1 vector动态增长原理 3.2 vector构造函数 3.3 vector常用赋值操作 3.4 vector大小操作 3.5 vector数据存取操作和插入删除 3.6 使用swap()收缩空间 3.7 使用reserve()预留空间提高程序效率 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 STL基本概念 STL(Standard Template Library)标准模板库,最早是惠普实验室开发的一系列软件的统称,现在主要出现在C++中,但是在引入C++之前该技术已经存在很长的时间了。 STL从广义上分为:容器(container),算法(alogrithm)和迭代器(iterator)。容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。 在C++标准库当中,隶属于STL的占到了80%以上。在C++标准库中,STL被组织成以下13个头文件: <algorithm> <deque> <functional> <iterator> <vector> <list> <map> <memory> <numeric> <queue> <set> <stack>

JDK源码那些事儿之LinkedBlockingDeque

点点圈 提交于 2019-12-03 06:38:35
阻塞队列中目前还剩下一个比较特殊的队列实现,相比较前面讲解过的队列,本文中要讲的LinkedBlockingDeque比较容易理解了,但是与之前讲解过的阻塞队列又有些不同,从命名上你应该能看出一些端倪,接下来就一起看看这个特殊的阻塞队列 前言 JDK版本号:1.8.0_171 LinkedBlockingDeque在结构上有别于之前讲解过的阻塞队列,它不是Queue而是Deque,中文翻译成双端队列,双端队列指可以从任意一端入队或者出队元素的队列,实现了在队列头和队列尾的高效插入和移除 LinkedBlockingDeque是链表实现的线程安全的无界的同时支持FIFO、LIFO的双端阻塞队列,可以回顾下之前的LinkedBlockingQueue阻塞队列特点,本质上是类似的,但是又有些不同: 内部是通过Node节点组成的链表来实现的,当然为了支持双端操作,结点结构不同 LinkedBlockingQueue通过两个ReentrantLock锁保护竞争资源,实现了多线程对竞争资源的互斥访问,入队和出队互不影响,可同时操作,然而LinkedBlockingDeque只设置了一个全局ReentrantLock锁,两个条件对象实现互斥访问,性能上要比LinkedBlockingQueue差一些 无界,默认链表长度为Integer.MAX_VALUE,本质上还是有界 阻塞队列

Python【day 13】内置函数02

巧了我就是萌 提交于 2019-12-03 06:09:23
一、作用域相关-2个 1、locals() 参数是空 返回当前位置作用域的所有变量,返回的是字典 当前位置:函数内,返回局部变量 当前位置:函数外,返回全局变量 2、globals() 参数是空 返回全局变量,返回的是字典二、迭代器-生成器相关--3个 1、range() 生成数字数据,例如:等差数列 参数是数字 2、next() 参数是迭代器-Iterator,返回的是迭代器的一个取值,只能向下取值,不能后退 和迭代器.__next__()等效--内部原理 3、iter() 用于把Iterable转换成迭代器 参数是Iterable,返回的是迭代器,内部调用的是Iterable.__iter__() 可迭代类型的(可迭代的):Iterable 包括:str list tuple dict set range() open() 迭代器:Iterator Iterator = iter(Iterable) 或者 Iterator = Iterable.__iter__() 注意:列表是Iterable,而不是Iterator三、其他-12个 1、字符串类型代码的执行--3个 1、eval() 作用:用于实现计算器,字符串表达式的执行 参数:字符串表达式 比如:'1+3' 返回:int--计算结果 应用场景:有返回值的字符串形式的代码- 比如:计算器、'[1,2]'或者"{'name'

Python 迭代器

醉酒当歌 提交于 2019-12-03 05:18:17
Python 迭代器 来自 https://www.runoob.com/python3/python3-iterator-generator.html 来自 https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640 迭代器的特性: 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法: iter() 和 next() 。 迭代器是惰性的,只有在需要返回下一个数据时它才会计算。当数据流很大时,使用迭代器十分有利。 字符串,列表或元组对象都可用于创建迭代器 L = [1, 2, 3, 4] it = iter(L) print(it) # 输出:<list_iterator object at 0x00000000024B9198> print(type(it)) # 输出:<class 'list_iterator'> print(next(it)) # 输出:1 print(next(it)) # 输出:2 T = (5, 6, 7, 8) it_1 = iter(T) print(it_1) # 输出:<tuple_iterator

STL源码剖析——序列式容器#3 Deque

孤人 提交于 2019-12-03 04:37:19
  Deque是一种双向开口的连续线性空间。所谓的双向开口,就是能在头尾两端分别做元素的插入和删除,而且是在常数的时间内完成。虽然Vector也可以在首端进行元素的插入和删除(利用insert和erase),但效率奇差(涉及到整个数组的移动),无法被接受。   另外,Deque与Vector间最大的差别就是Deque没有类似于Vector中的容量的概念,因为Deque是以分段连续空间组合而成的,至于什么是分段连续空间,等会会详细讨论。所以Deque不会有像Vector那样“因旧空间不足而重新配置一块更大的空间,然后复制元素,再释放旧空间”这样的操作。   也因为其独特的数据结构,所以对Deque自身进行排序效率不是很高,至少对比于Vector而言确实如此。如果为了最高效率,建议可将Deque先完整复制到一个Vector身上,将Vector排序后(STL Sort算法),再复制回Deque。    Deque的中控器   deque是连续空间?不,这只是假象,是设计者故意设计成其看上去是连续的。其实内部只是局部连续,deque本身由一段一段的定量连续空间构成。一旦有必要在deque的前端或后端增加新空间,便配置一段定量连续空间,串接在整个deque的头端或尾端。deque的最大任务, 便是在这些分段的定量连续空间上,维护其整体连续的假象,并提供随机存取的接口。

Python3 迭代器与生成器

自作多情 提交于 2019-12-03 03:31:33
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法: iter() 和 next() 。 字符串,列表或元组对象都可用于创建迭代器: 生成器 在 Python 中,使用了 yield 的函数被称为生成器(generator)。 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。 调用一个生成器函数,返回的是一个迭代器对象。 以下实例使用 yield 实现斐波那契数列: 函数: 参数 以下是调用函数时可使用的正式参数类型: 必需参数 关键字参数 默认参数 不定长参数 默认参数 调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值: 不定长参数 你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:(待补充) 匿名函数 python 使用 lambda 来创建匿名函数。 所谓匿名