迭代器

迭代器

半世苍凉 提交于 2019-12-04 05:39:46
1,可迭代对象 内部含有__iter__方法的对象是可迭代对象 遵循可迭代协议 dir() 检查对象含有什么方法 dir()会返回一个列表,这个列表中含有该对象的以字符串 的形式所有方法名。这样我们就可以判断python中的一个对 象是不是可迭代对象了 print(dir("abc")) 判断对象是否是可迭代对象的方法 方法一: print('__iter__' in dir([1, 2, 3])) 通过成员运算符 ,返回bool 值 方法二 : fromcollections .abc import Iterable print(isinstance('123',Iterable)) isinstance 判断一个对象是什么类型,返回bool 迭代器 内部含有 __iter__ 且 __next__方法的就是迭代器。 可迭代对象通过 .__iter__()可以转换成迭代器,满足迭代器协 议。 l= [1, 2, 3] l_obj= l.__iter__() 判断迭代器的方法: 第一种: print('__next__'in dir(l_obj)) 第二种: fromcollections.abcimport Iterator print(isinstance('123',Iterator)) 迭代器的取值方法 : 方法一: print(l_obj.__next__())

迭代器_学习笔记

不打扰是莪最后的温柔 提交于 2019-12-04 03:42:52
1 # Author:CallMeV 2 # DATE :2019-11-10 3 # Time : 10:43 4 5 # 迭代器的创建 6 l = [1,2,3,4] 7 d = iter(l) # <list_iterator object at 0x000002AEA4DD4490> 8 print(d) 9 print(next(d)) 10 print(next(d)) 11 print(next(d)) 12 print(next(d)) 13 14 15 # for循环做的三件事情: 16 # 1、调用iter方法返回一个可迭代对象 17 # 2、不断调用可迭代对象的next方法 18 # 3、处理StopInteration 19 for i in [1,2,3,4]: 20 print(i) 21 22 from collections import Iterator 23 print(isinstance([1,2],list)) 24 print(isinstance(l,Iterator)) 25 print(isinstance(d,Iterator)) 迭代器满足两个条件:1 有 iter 方法 2 有 next 方法 来源: https://www.cnblogs.com/fly10086/p/11829270.html

初学设计模式之迭代器模式

我的梦境 提交于 2019-12-04 03:36:20
概念与定义 迭代器模式提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节 迭代器模式的应用 迭代器模式是一种退化的设计模式,因为它的使用过于普遍,因此被嵌入到具体语言中了,C++使用迭代器读取其中元素的例子 1 //迭代器 2 3 #include<iostream> 4 #include<vector> 5 #include<string> 6 #include<list> 7 8 using namespace std; 9 10 int main() 11 { 12 vector<string>m_vector; 13 list<string>m_list; 14 string m_str[] ={"A","B","C","D","E"}; 15 16 //向容器里面添加元素 17 for(int i=0;i<sizeof(m_str)/sizeof(m_str[0]);i++) 18 { 19 m_vector.push_back(m_str[i]); 20 m_list.push_back(m_str[i]); 21 }; 22 23 //利用迭代器读取容器里面的元素 24 for(vector<string>::iterator iter=m_vector.begin();iter!=m_vector.end();iter++) 25 { 26

设计模式 迭代器模式

独自空忆成欢 提交于 2019-12-04 03:18:17
迭代器模式:顺序访问一个集合(顺序访问就要求是有序的)。使用者无需知道集合的内部结构(封装) <body>   <div id="div1">     <p>jquery each</p>     <p>jquery each</p>     <p>jquery each</p>   </div>   <script>     var arr = [1, 2, 3];     var nodeList = document.getElementsByTagName('p');     var $p = $('p');     //要对三个变量进行遍历,需要写三个遍历方法     // 第一     arr.forEach(function(item) {       console.log(item);     })     // 第二     var i, length = nodeList.length;     for(i = 0; i < length; i++) {       console.log(nodeList[i]);     }     // 第三     $p.each(function(key, p){       console.log(key, p);     })   </script> </body> 这三种数据结构都是不一样的

大数据之路week01--自学之集合_2(列表迭代器 ListIterator)

别来无恙 提交于 2019-12-04 02:09:23
列表迭代器:    ListIterator listerator():List集合特有的迭代器   该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法 特有功能:    Object previous();获取上一个元素   boolean hasPrevious():判断是否有元素    注意:ListIterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用 1 package com.wyh.Iterator; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 import java.util.ListIterator; 7 8 /** 9 * @author WYH 10 * @version 2019年11月9日 下午7:31:41 11 * 12 * ListIterator : List集合特有的迭代器 13 * 14 */ 15 public class ListIteratorDemo1 { 16 public static void main(String[] args) { 17 //创建集合 18 List i = new ArrayList(); 19

迭代器迭代的时候跳过第一部分

依然范特西╮ 提交于 2019-12-03 21:07:54
有的时候,我们想基于迭代器的某个特定元素开始进行迭代。也就是说,在这个元素之前的元素都跳过。 itertools提供了一个dropwhile方法: itertools.dropwhile(predicate, iterable) Make an iterator that drops elements from the iterable as long as the predicate is true; afterwards, returns every element. Note, the iterator does not produce any output until the predicate first becomes false, so it may have a lengthy start-up time. 翻译即为:iterable中的每个元素从index 0开始,依次通过predicate函数进行检查,当predicate的结果为true时,跳过,直到第一次遇到为false的情况。从第一个为false的元素开始,后面的元素全部返回。 示例如下: with open('/etc/passwd') as f: for line in f: print(line, end='') ## # User Database # # Note that this file

迭代器切片操作

耗尽温柔 提交于 2019-12-03 21:05:34
迭代器对象一般来说是不支持像可迭代对象(list,tuple等)的切片操作。 如下示例: def count(n): while True: yield n n += 1 c = count(0) c[10:20] Trackback(most recent call last): File "<stdin>", line 1, in <module> TypeError: 'generator' object is not subscriptable itertools模块提供了对迭代器对象的切片操作支持,itertools提供了模块级函数islice。 import itertools for x in itertools.islice(c, 10, 20): print(x) ... 10 11 12 13 14 15 16 17 18 19 来源: https://www.cnblogs.com/jeffrey-yang/p/11808977.html

c++中const用法

三世轮回 提交于 2019-12-03 21:00:27
1 使用const修饰变量 有时候我们需要定义这样一种变量,它的值不能被更改。为了满足这一要求,可以通过关键字const对变量的类型加以限定。 1.1 const 修饰普通的变量 const int bufSize=512; 这里将bufSize定义成了一个常量。任何试图为bufSize赋值的行为都将引发错误。 注意:const对象必须初始化,因为const对象一旦创建后其值就不能再改变。 如: const int j=42; //正确,编译时初始化 const int i=get_size();//正确,运行时初始化 const int k; //错误,未初始化 int i=42; const int ci=i;//正确, 1.2 const的引用 对常量的引用(reference to const),将引用绑定到const对象上。与普通引用不同的是: (1)对常量的引用不能用于修改它所绑定的对象。 (2)不能将非常量引用指向一个常量对象值。 (1)对常量的引用不能用于修改它所绑定的对象。 int i=42; int &r1=i; const int &r2=i;//r2也绑定了对象i,但不允许通过r2修改i的值 r1=0; //正确 r2=0; //错误,r2是一个常量引用 (2)不能将非常量引用指向一个常量对象。 const int ci=1024; int &r2=ci;

关联容器小结

≯℡__Kan透↙ 提交于 2019-12-03 20:55:48
目录 关联容器和顺序容器的不同 对于有序关联容器中的关键字类型要求 关联容器额外的类型别名 关联容器和算法 关联容器的操作及其返回值 插入元素 删除元素 访问和查找元素 1.下标(有序无序可用) 2.find或者count(有序无序可用) 3.lower_bound和upper_bound(有序版本) 4.equal_range函数(有序版本) 无序容器 概念和性能 无序容器对关键字类型的要求 关联容器和顺序容器的不同 关联容器和顺序容器的根本不同之处在于, 关联容器中的元素是按关键字来保存和访问 的(比如map和set),而 顺序容器中的元素是按照在容器中的位置来顺序保存和访问 的(比如vector和string)。 顺序容器有 vector deque list forward_list array string 关联容器有 按照关键字有序保存 map set multimap multiset 无序保存 unordered_map unordered_set unordered_multimap unordered_multiset 关联容器不支持和位置相关的操作,因为是按关键字顺序存储的,关联容器的迭代器都是双向的。 对于有序关联容器中的关键字类型要求 对与有序关联容器而言, 关键字类型必须定义元素比较的方法(这一点尤其重要) ,默认时,使用关键字类型的

Effective STL

天涯浪子 提交于 2019-12-03 20:53:04
STL(standard template library)提供了一组表示容器,迭代器,函数对象和算法的模板。容器是一个与数组类似的单元,可以存若干个值。 STL容器是同质的,即存储的值的类型相同; 算法是 完成特定任务的处方;迭代器是能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针;函数对象是类似于函数的对象,可以是类对象或函数指针(包括函数名,因为函数名被用作指针)。 STL不是面向对象编程,而是一种不同的编程模式-通用编程模式(generic programming)。 1. 慎重选择容器类型 标准STL序列容器: vector, string, deque 和 list. 标准STL关联容器:set, multiset, map 和 multimap. 非标准序列容器slist 和 rope. 非标准的关联容器 hash_set, hash_multiset, hash_map 和 hash_multimap. 基于算法复杂性考虑: vector是默认应使用的序列类型;当需要频繁地在序列中间做插入和删除操作时,应使用list;当大多数插入和删除操作发生在序列的头部和尾部时,deque是应考虑的数据结构。 STL一种分类方法:连续内存容器(contiguous-memory container)和 基于节点的容器(node-based container)。 2.