迭代器

python itertools

痞子三分冷 提交于 2019-11-26 10:58:32
转载至: https://www.cnblogs.com/haiyan123/p/9804091.html 1、介绍 itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。 使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。 - 无限迭代器  itertools包自带了三个可以无限迭代的迭代器。这意味着,当你使用他们时,你要知道要的到底是最终会停止的迭代器,还是需要无限地迭代鞋去。 (1)count(初值=0, 步长=1) :count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可以接收指定的步长参数。我们来看一个简单的例子: >>> from itertools import count >>> for i in count(10): #从10开始无限循环 ... if i > 20: ... break ... else: ... print(i) ... 10 11 12 13 14 15 16 17 18 19 20 (2)islice(count(10), 5) :从 10 开始,输出 5 个元素后结束。islice 的第二个参数控制何时停止迭代。但其含义并不是”达到数字 5 时停止“,而是”当迭代了 5 次之后停止“。 >>> from itertools import islice >>>

python中生成器和迭代器以及可迭代对象的区别

北战南征 提交于 2019-11-26 10:34:10
先简单的总结一下三种之间的关系: 生成器和迭代器都是可迭代对象, 而生成器是一类特殊的迭代器. 对于生成器和迭代器我们都可以使用next()函数来获取其下一个返回值, 当然也可以使用for...in...来获取他们的返回值(iter返回对象本身), iter函数: 获取可迭代对象身上的迭代器, 会调用可迭代对象身上的iter的方法 next函数: 获取迭代器中的下一个值,会调用迭代器对象身上的next的方法 所以先调用可迭代对象的iter方法获得迭代器 就可以使用迭代器的next方法 然后在进行分别说明: 可迭代对象: 在python中通俗的来讲就是能够通过for...in...这类语句迭代读取一条数据供我们使用的对象就称之为可迭代对象(Iterable)。 例如列表(list),元组(tuple)等,我们还可以通过isinstance(obj, Iterable)来判断一个对象是不是可迭代对象. 如果对象是可迭代对象则,isinstance的结果返回True 例: from collections import Iterable obj = ['a','b',1,2] isinstance(obj, Iterable) # True obj_1 = {3,5,6,7,2} isinstance(obj_1, Iterable) # True ———————————————————

STL————vector的用法

我的梦境 提交于 2019-11-26 10:31:26
一、什么是vector? 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 二、容器特性 1.顺序序列 顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。 2.动态数组 支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。 3.能够感知内存分配器的(Allocator-aware) 容器使用一个内存分配器对象来动态地处理它的存储需求。 三、基本函数实现 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t vector(const vector&):复制构造函数 vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中 2.增加函数 void push_back(const T& x):向量尾部增加一个元素X iterator insert(iterator it,const T& x)

java中for foreach效果对比,原理分析

橙三吉。 提交于 2019-11-26 08:11:35
最近闲来无事看了看java中for 与foreach的效率,文章如有错误之处,欢迎大家帮忙指正。谢谢。 首先foreach写法简单,但是不知道效率如何, 简单编写ArrayList测试用例, 可以看出foreach运行效率很慢,那么换一下LinderList呢。 效果很明显,foreach用于链表结构存储查询速度非常快。那么这么为什么呢? for循环是根据下标一个个检索获取,而foreach是通过迭代器Iterator,不断获取next元素。 通过查看源码可以看到LinderList定义了一个迭代器,而foreach内部就是执行hasNext()和next()方法。在执行foreach时候无法对对象进行修改,是因为checkForComodification()中判断了当前对象修改次数与期望修改次数是否相等,不等就会抛出错误信息:ConsurrentModificationException。 来源: CSDN 作者: 生活因我绚丽 链接: https://blog.csdn.net/heart_mine/article/details/82855471

java foreach与for遍历效率对比

China☆狼群 提交于 2019-11-26 08:09:24
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">由于本人在准备秋招,所以在看到foreach和for那个遍历效率更高的问题的时候,我百度了,又谷歌了,但是基本有的人说for更好,foreach更好,但是我无意中看到有人说如果是数组类型的迭代器的话,效率相差不大,如果硬要说那个更好就是for,因为迭代器增加了范围的判断,而for则我们自己判断。如果是LinkedList链表类型的话就是foreach遍历更好。个人觉得不需要一下子去写例子,你弄懂了原理,自然就知道区别了。好了,先说结论,现在阐述一下原理吧。</span> 先看数组类型的迭代器,拿ArrayList来说吧。 ArrayList<Integer> list = new ArrayList<>(); //一般迭代器的写法 for (Iterator iterator = list.iterator(); iterator.hasNext();) { Integer integer = (Integer) iterator.next(); System.out.println(integer); } //for-each隐藏迭代器的写法,避免混乱和出错的可能,也更简洁。 for

pyhton中的迭代器,生成器及函数式编程

匆匆过客 提交于 2019-11-26 03:59:18
函数定义与调用 #python中如何函数无返回值, 默认返回None; def 函数名(形参) 函数体 return 返回值 函数名(实参) #打印返回值 print 函数名 #定义了一个函数 def fun(*args): # 形式参数 print args #调用函数 fun("python", 12, 0) # 实参 #必选参数 #默认参数 #可变参数----> *args args是元组类型 #关键字参数----->**kwargs kwargs是字典类型 函数的形式参数的默认值不要是可变参数; def add_end(L=[]): # 默认参数 L = [1,2,3] L.append('END') # [1,2,3, 'END'] return L # return [1,2,3, 'END'] print add_end([1, 2, 3]) print add_end() print add_end() print add_end() 测试结果: 参数组合时: 必选 > 默认参数 > 可变参数 > 关键字参数 def fun(a, b=0, *c, **d): print a, b, c, d fun(1, 2, 4, 5, 6, 7, c=3, x=2, z=2) 测试结果: 测试练习:利用函数定义用户管理系统 #!/usr/bin/env python

Python之迭代器与生成器

北慕城南 提交于 2019-11-26 01:47:30
Python之迭代器与生成器 1. 迭代器 迭代器的概念及其特点 可迭代的对象iterable和迭代器iterator 案例 2. 生成器 生成器的概念及其特点 案例 1. 迭代器 迭代器类似于列表生成式[ i for i in range(10) ], 不过把 [ ] 换成 (),从而变成迭代器 迭代器的概念及其特点 迭代器是python最强大的功能之一,是访问集合元素的一种方式 迭代器是一个可以记住遍历位置的对象 迭代器从集合的第一个元素开始访问, 直到所有元素被访问完而结束,访问完的标识是出现异常标识StopIteration。 它只能往前不能后退 迭代器有两个基本方法:iter() 和 next() 字符串、列表、元组等 可迭代对象 (iterable) 都可以用于创建迭代器 可迭代的对象iterable和迭代器iterator 使用isinstance() 函数来判别左参数实例是否为右参数对象的子类 判断是否为可迭代对象 结果: 判断是否为迭代器: 结果 案例 (1)列表迭代器 创建一个列表,通过 iter() 函数来将可迭代对象 list 转化成迭代器,再通过next()函数来逐步遍历迭代器,最后返回异常标识 StopIteration 标识表示遍历结束 (2)字典迭代器(迭代key值) 2. 生成器 生成器为一个函数 生成器的概念及其特点

Python入门篇(八)之迭代器和生成器

邮差的信 提交于 2019-11-26 01:35:02
迭代器和生成器 1、列表生成式 列表生成式即 List Comprehensions ,是 Python 内置的非常简单却强大的可以用来创建 list 的生成式。 举个例子,要生成 list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 可以用 list(range(1, 11)) : >>> list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成 [1x1, 2x2, 3x3, ..., 10x10] 怎么做?方法一是循环: >>> L = []` >>> for x in range(1, 11): ... L.append(x * x) ... >>> L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的 list : >>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把 list 创建出来,十分有用,多写几次,很快就可以熟悉这种语法。 for循环 后面还可以加上 if判断 ,这样我们就可以筛选出仅偶数的平方: >>> [x * x

迭代器和分部类

情到浓时终转凉″ 提交于 2019-11-26 01:10:38
迭代器可以使开发人员方便的使用foreach语句访问类中的字段值,而分布类使程序的结构更加灵活,协同工作更加方便。 迭代器 迭代器使用yield return 语句依此返回每个元素,yield break语句将终止迭代,可以在类中实现多个迭代器,每个迭代器必须像任何类成员一样有唯一名称,并且可以在foreach语句中被客户端代码调用。 常用方法:对IEnumerator接口实现GetEnumerator方法。 public class Family : System . Collections . IEnumerable //类继承IEnumerable接口 { string [ ] MyFamily = { "爸爸" , "妈妈" , "弟弟" , "妹妹" } ; public System . Collections . IEnumerator GetEnumerator ( ) { for ( int i = 0 ; i < MyFamily . Length ; i ++ ) { yield return MyFamily [ i ] ; } } } class Program { static void Main ( string [ ] args ) { Family family = new Family ( ) ; foreach ( string str in

集合

笑着哭i 提交于 2019-11-25 23:49:47
Java 集合 Collection 集合 1.1 集合概述 集合:集合是 java 中提供的一种容器,可以用来存储多个数据。 1.2 集合框架 JAVASE 提供了满足各种需求的 API,在使用这些 API 前,先了解其继承与接口操作架构,才 能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。 集合按照其存储结构可以分为两大类,分别是单列集合 java.util.Collection 和双列集合 java.util.Map Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的 子接口,分别是 java.util.List 和 java.util.Set。其中,List 的特点是元素有序、元素 可 重 复 。 Set 的 特 点 是 元 素 无 序 , 而 且 不 可 重 复 。 List 接 口 的 主 要 实 现 类 有 java.util.ArrayList 和 java.util.LinkedList , Set 接 口 的 主 要 实 现 类 有 java.util.HashSet 和 java.util.TreeSet。 1.3 Collection 常用功能 Collection 是所有单列集合的父接口,因此在 Collection 中定义了单列集合(List 和 Set) 通用的一些方法