迭代器

day27-python之迭代器协议

无人久伴 提交于 2019-11-27 18:05:58
1.item系列方法 # class Foo: # def __getitem__(self, item): # print('getitem',item) # return self.__dict__[item] # # def __setitem__(self, key, value): # print('setitem') # self.__dict__[key]=value # # def __delitem__(self, key): # print('delitem') # self.__dict__.pop(key) # class Foo: def __getitem__(self, item): print('getitem',item) return self.__dict__[item] def __setitem__(self, key, value): print('setitem') self.__dict__[key] = value def __delitem__(self, key): print('delitem') self.__dict__.pop(key) f1 = Foo() print(f1.__dict__) f1.name = 'egon' # f1['name'] = 'egon' f1['age'] = 18 # print

java_0816

走远了吗. 提交于 2019-11-27 16:02:01
Collection集合 回顾: 1. Math 2. System System . in 输入流 System . out 输出流 System . err 打印 2. 时间对象 Date 两个构造 DateFormat 抽象类 SimpleDateFormat == > 把 时间字符串转换为Date 对象 parse ( ) format ( ) 把Date相应的格式转换为时间字符串 Calendar == > 是三个方法 set ( ) get ( ) setTime() getTime ( ) // 集合: 对象数组: 语法: 类名 [ ] d 对象名 = new 类名 [ 5 ] ; 数组的缺点: 只要创建出来就固定其长度了 , 所有扩展性差 , == > 使用集合来解决 数组与集合 的关系: 相同点: 1. 数组与集合都是用来存数据 , 都可以通过索引来获取数据 2. 数组与集合都是采用数组的方法来进行存的 不同点: 1. 数组可以存基本数据类型,也可以存引用数据类型 集合只能够存引用数据类型 2. 数组的长度是固定的,集合的长度是可变的 集合的框架 : 单列 : 每一个存的数据的都是独立的 Collection 跟接口 / \ / \ List ( 有序,有索引,可以重复) Set ( 无序 , 不可以是要美好普通的 for 循环 ) / \ \ / HashSet

大话设计模式笔记(十七)の迭代器模式

一笑奈何 提交于 2019-11-27 15:34:31
迭代器模式 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 什么时候用? 当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式 。 你需要对聚集有多种方式遍历时,可以考虑用迭代器模式。 UML图 模板代码 Aggregate /** * 聚集抽象类 * Created by callmeDevil on 2019/8/17. */ public abstract class Aggregate { // 创建迭代器 public abstract Iterator createIterator(); } Iterator /** * 迭代器抽象类 * Created by callmeDevil on 2019/8/17. */ public abstract class Iterator { // 用于定义得到开始对象、得到下一对象、判断是否到结尾、当前对象等抽象方法 public abstract Object first(); public abstract Object next(); public abstract boolean isDone(); public abstract Object currentItem(); } ConcreteAggregate /** * 具体聚集类 *

Python学习笔记---第三周

隐身守侯 提交于 2019-11-27 15:16:19
1.文件操作 (1)找到文件位 (2)双击打开 (3)进行一些操作(r - read(读)w - write(写)a - 追加 rb -读字节 wb - 写字节 ab - 追加写 r+ - 读写 w+ - 写读 a+ - 追加读 (4)关闭文件 open() -- 打开 open通过python控制操作系统进行打开文件 1.1 r模式 文件只能读取一次 格式:f = open("文件位置\文件名",mode="r"(不写默认为r),encoding="utf-8") print(f.read()) --- 全部读取 print(f.read(11)) -- 按照字符读取 print(f.readline()) -- 读取一行,默认尾部有个换行符 print(f.readline().strip()) -- 去除换行符 print(f.readlines()) -- 一行一行读取,全部储存在列表中 1.2 路径 绝对路径:从磁盘(C盘)开始查找 f = open(r"D:\Python_s25\day08\t1",mode="r",encoding="utf-8") 相对路径:相对于某个文件进行查找 f = open("t1",mode="r",encoding="utf-8") 路径转义:"E:\Python全栈"\tt电话 -- \t会被认为是制表符 解决办法:1.每个\变成\

Python 生成迭代器 iter() 函数

好久不见. 提交于 2019-11-27 15:11:01
Python 生成迭代器 iter() 函数 功能: 函数用来生成迭代器。 语法: iter ( object [ , sentinel ] ) object – 支持迭代的集合,对象,比如 list ,元组等。 sentinel – 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的 next() 方法时,都会调用 object 返回值: 迭代器对象。 实例: >> > a = [ 111 , 221 , 333 ] >> > b = iter ( a ) >> > b . next ( ) 111 >> > b . next ( ) 221 >> > b . next ( ) 333 >> > b . next ( ) Traceback ( most recent call last ) : File "<pyshell#25>" , line 1 , in < module > b . next ( ) StopIteration 来源: https://blog.csdn.net/qq_41683065/article/details/99690351

java46

故事扮演 提交于 2019-11-27 14:09:00
1.迭代器遍历 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class 迭代器遍历 { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) { Collection c = new ArrayList(); c.add("a"); c.add("b"); c.add("c"); // 遍历集合 //1.数组 Object[] o = c.toArray(); for(int i=0;i<o.length;i++) { System.out.println(o[i]); } System.out.println("-------------------"); //2.迭代器遍历 Iterator it = c.iterator(); Object obj = it.next(); System.out.println(obj); Object obj2 = it.next(); System.out.println(obj2); //判断集合中是否还有元素 boolean res = it.hasNext(); System

Set容器

岁酱吖の 提交于 2019-11-27 12:37:08
set集合容器: 实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构,在插入元素时, 它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值, 而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与有字数的高度相等, 这样,二叉树的高度最小,从而检索速度最快。要注意的是,它不会重复插入相同键值的元素,而采取忽略处理。 平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。 另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时, 就会自动将元素按键值从小到大的顺序排列。 构造set集合的主要目的是为了快速检索,使用set前,需要在程序头文件中包含声明“#include<set>”。 c++ stl集合(Set): 是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则, 自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素 2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数 3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)

173. 二叉搜索树迭代器

别等时光非礼了梦想. 提交于 2019-11-27 12:31:17
通过一个优先队列进行存储数据 然后每一次读数据都是输出第一个结点 class BSTIterator { Queue<Integer>ls = new PriorityQueue<Integer>(); public BSTIterator(TreeNode root) { dfs(root); } public void dfs(TreeNode root) { if(root==null) {return ;} ls.add(root.val); if(root.left!=null)dfs(root.left); if(root.right!=null)dfs(root.right); } /** @return the next smallest number */ public int next() { return ls.poll(); } /** @return whether we have a next smallest number */ public boolean hasNext() { if(ls.size() == 0) return false; else return true; } } 来源: https://www.cnblogs.com/cznczai/p/11363169.html

迭代器&生成器

倾然丶 夕夏残阳落幕 提交于 2019-11-27 11:16:17
什么是列表生成式:用简洁的语句通过不同的规则动态的生成需要的列表。 [i * 2 for i in range(10)] 等同于: l = [] for i in range(10): l.append(i * 2) 在要生成大量数据的场景,使用列表生成器将占用大量的内存空间,此时可以通过使用生成器(generator)来边循环边计算,以节省内存资源。 生成器:只有在遍历时才生成对应的值,且只记录当前位置的值。 gen = ( i * 2 for i in range(10)) 生成器的遍历: 1,使用for循环遍历: for i in gen 2,使用next()函数来获取生成器的下一个返回值:next(gen), gen.__ next__() 当生成器的推算算法比较复杂,使用类似列表生成式的for循环语句无法实现的时候,我们还可以使用函数来实现推算。 生成斐波拉契数列: def fib(max): n,a,b =0,0,1 while n < max: yield b a,b = b, a + b n+=1 return "finished" # 生成器函数return内容为报错的时候显示的信息 # fib函数中使用了yield就变成了一个生成器。 fib(100) yield的作用保存当前状态并返回。 next方法,只调用yield不传值,

STL中三大组件基本使用

故事扮演 提交于 2019-11-27 10:16:20
摘要:本文主要介绍了STL中三大组件——容器、迭代器和算法的基本使用。 1、容器 1.1 STL中容器的研究内容 STL容器实际上研究的是 常见的数据结构的实现。 注意:数据结构存在的意义就是提供一种数据的特定排列方式,以方便算法的实现。 1.2 常用的数据结构(容器)以及分类 数组(array),链表(list),tree(树),栈(stack),队列(queue),集合(set),映射表(map),根据数据在容器中的排列特性,这些数据分为序列式容器和关联式容器两种: 序列式容器强调值的排序 ,序列式容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。例如: Vector容器、Deque容器、List容器 等。 关联式容器是非线性的树结构,更准确的说是二叉树结构 。各元素之间没有严格的物理上的顺序关系,也就是说元素在容器中并没有保存元素置入容器时的逻辑顺序。关联式容器另一个显著特点是:在值中选择一个值作为关键字key,这个关键字对值起到索引的作用,方便查找。例如: Set/multiset容器 Map/multimap容器 。 2、算法 2.1 算法的概念 以有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms). 2.2 算法的分类 算法分为: 质变算法 和 非质变算法 。 质变算法:是指运算过程中会更改区间内的元素的内容。例如 拷贝