迭代器

python-多任务之协程

痴心易碎 提交于 2020-02-03 00:51:00
迭代的概念 使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表获取值的过程 # 例如 for value in [ 2 , 3 , 4 ] : print ( value ) 可迭代对象 使用for循环遍历取值的对象叫做可迭代对象, 比如:列表、元组、字典、集合、range、字符串 如何判断是否为可迭代对象 # 元组,列表,字典,字符串,集合,range都是可迭代对象 from collections . abc import Iterable # 3.7以上版本为导入collections.abc # from collections import Iterable # 判断对象是否是指定类型 result = isinstance ( ( 3 , 5 ) , Iterable ) print ( "元组是否是可迭代对象:" , result ) result = isinstance ( [ 3 , 5 ] , Iterable ) print ( "列表是否是可迭代对象:" , result ) result = isinstance ( { "name" : "张三" } , Iterable ) print ( "字典是否是可迭代对象:" , result ) result = isinstance ( "hello" , Iterable ) print

c++学习笔记(三)

这一生的挚爱 提交于 2020-02-02 23:35:27
STL (Standard Template Library) 标准模版库 一、sort 二、二分查找 三、排序容器 1. multiset 要 #include ; 用法1: multiset st; 定义了一个multiset变量st,st里面可以存放T类型的数据,并且能 自动排序 排序的规则: 表达式 a<b 为true,则a排在b前面,否则b排a前面 (从小到大) st.insert(i) 添加元素 st.find(i) 查找和i相等的元素,返回值是迭代器 st.erase(i) 删除元素 st.begin()返回指向第一个元素的迭代器 st.end()返回指向最后一个元素 后面 的迭代器 st.lower_bound(i)返回指向下界的迭代器 st.upper_bound(i) 返回指向上界的迭代器 迭代器(类似指针) 要访问multiset得通过迭代器 定义迭代器 multiset ::iterator p; p是迭代器,用于指向multiset中的元素。 迭代器可++,--,!=,==。 但是不可以加减一个整数,也不可以相减、比大小。 #include<iostream> #include<set> using namespace std; int main() { int a[10] = {1,14,13,23,18,42,8,7,8,6},i; multiset

迭代器、生成器、可迭代对象

安稳与你 提交于 2020-02-01 10:55:39
迭代器出现的原因 Python中的列表,有可能会占用很大的空间。而迭代器,它是每一次用__next__调用时才计算出值,这会节省内存空间。 迭代器、生成器、可迭代对象的关系 可迭代对象一般是列表、元组、字典、字符串等可以For循环的对象。可通过以下语句判断是不是可迭代对象。 from collections.abc import Iterator, Iterable l = [1, 2, 3, 4, 5] print(isinstance(l, Iterable)) # True 而且每个可迭代器都有__iter__方法,并且此方法返回一个迭代器。 那么什么是迭代器呢?它与可迭代对象有什么关系?为什么for循环可以得出每人元素的值?那是因为可迭代对象有一个记录员,可记录当前位置。而这个记录员就是迭代器。可迭代对象可生成迭代器,如下: l = [1, 2, 3, 4, 5] it = iter(l) print(isinstance(it, Iterator)) # True 每个迭代器都有__next__方法。而生成器是迭代器的一种,除了有__next__方法以外,还要用到yield。 for循环的本质 其实for循环一个可迭代对象,为我们做了以下事情 1、通过可迭代对象生成一个迭代器 2、调用迭代器的__next__方法,生成值 3、遇到错误时,就退出 以下程序就说明了这个问题

CopyOnWriteArrayList详解

人盡茶涼 提交于 2020-02-01 05:27:45
今天在项目中发现有人使用了CopyOnWriteArrayList,但是不明白这个类跟ArrayList有什么区别,于是搜索相关的内容学习一下:   CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add,set等)都是通过底层数组的进行一次新的复制产生的。 这一般需要很大的开销,但是当遍历操作的数量大大打的超过可变操作的数量时,这种方式更有效。在不能或者不想同步遍历的时候,但又要从并发线程中排出冲突的时候,他很有用。“快照”风格的迭代器方法在创建迭代器时使用了对数组状态的引用。此数组在迭代器的生存期内不会更改,因此不可能发生冲突,并且迭代器保证不会抛出ConCurrentModificationException.创建迭代器以后,迭代器就不会反映列表的添加、移除或者更改。在迭代器上进行元素的更改(remove,set和add)不受支持。这些方法将抛出UnsupportOpreationException。允许使用所有元素包括null.   内存一致性效果:当存在其他并发Collection的时候,讲对象放入CopyOnWriteArrayList之前的线程中的操作happen-before,随后通过另一线程从CopyOnWriteArayList中访问或移除该元素的操作。 这种情况一般出现在多线程操作时

Java总结05 Java集合体系.最高集合接口Collection和其迭代器/一般集合接口List和其迭代器/增强版For循环的应用

谁说我不能喝 提交于 2020-02-01 03:36:06
Collection - 集合 Iterator - 迭代器 Revise — 修改(rɪˈvaɪz) ** 1. 一/Collection集合的创建与应用 Collection本身是个接口,那么如果要把它以集合形式去应用,那么就需要用到多态.而子类则必须是个集合实现类,比如ArrayList. 格式: Collection<E泛型> 多态集合对象自定义名 = new ArrayList<E>(); 如: Collection<String> collectionListObj = new ArrayList<String>(); 常用方法: 1/对象名.add(); 添加元素 2/对象名.remove(); 删除指定元素,因为没有索引值,所以如果存在多个相同元素,则删除最靠前的. 3/对象名.isEmpty(); 判断集合中的元素是否全部为空内容元素,如果是则True,不是则False 4/对象名.contains(); 判断指定元素是否存在集合中 5/对象名.clear(); 清空所有元素(即将所有元素内容清空) 6/对象名.size(); 取集合长度 public static void main ( String [ ] args ) { Collection < String > collectionListObj = new ArrayList < String > (

deque容器的基本使用

懵懂的女人 提交于 2020-02-01 02:57:41
deque容器 使用deque 。即 双端队列 ;特点为front和back都可以插入,也都可以删除; 只需要看懂数据结构中的双端队列,使用就根据特点即可; 代码 # include <iostream> # include <deque> using namespace std ; # include <algorithm> //iterator 普通迭代器 reversed_iteraotr 反向迭代器 const_iteraotr 只读迭代器 void printDeque ( const deque < int > & d ) { for ( deque < int > :: const_iterator it = d . begin ( ) ; it != d . end ( ) ; ++ it ) { cout << * it << " " ; } cout << endl ; } void test01 ( ) { deque < int > d ; d . push_back ( 10 ) ; d . push_back ( 20 ) ; d . push_back ( 30 ) ; d . push_front ( 40 ) ; d . push_front ( 50 ) ; d . push_front ( 60 ) ; printDeque ( d ) ;

java 快速失败(fail—fast)和 安全失败(fail—safe)

落爺英雄遲暮 提交于 2020-01-31 22:02:38
一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程(迭代器迭代)中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent ModificationException(这个异常只建议用于检测并发修改的bug)。 场景:java.util包下的集合类都是快速失败的,不能在多线程下发生并发修改(迭代过程中被修改)。 用ArrayList来解释 (AbstractList是ArrayList父类) 大部分博客是解释modCount != expectedModCount 这里我需要特别强调这两个属性并不是位于同一个类而是 java . util . AbstractList#modCount! = java . util . AbstractList . Itr#expectedModCount 当我们对ArrayList对象进行数据修改操作的时候将会触发java . util . AbstractList#modCount 加 1 , 当我们使用迭代器遍历ArrayList对象的时候,会新建一个迭代器对象(java . util . AbstractList . Itr) 同时初始化java . util . AbstractList . Itr#expectedModCount为java . util . AbstractList

Power up C++ with the Standard Template Library: Part I[翻译]

隐身守侯 提交于 2020-01-31 12:39:35
Power up C++ with the Standard Template Library: Part I 【原文见: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary 】 作者 By DmitryKorolev Topcoder 成员 翻译 农夫三拳@seu Containers Before we begin Vector Pairs Iterators Compiling STL Programs Data manipulation in Vector String Set Map Notice on Map and Set More on algorithms String Streams Summary 也许你已经使用C++作为主要编程语言来解决Topcoder中的问题了,这就意味着你已经在简单的使用 STL了,因为数组和字符串都是以STL对象的方式传入到你的函数中的。也许你已经注意到了,有许多 程序员他们写代码要比你快并且代码也比你的简洁。 也许你不是一个C++程序员,但是因为C++的强大功能以及它的库(或者因为你在Topcoder practice 房间和比赛里面看到的简短的解决方案),你想成为一个这样的程序员。 不管你来自哪里,这篇文章将会帮助你掌握它

(三)Iterator迭代器遍历集合

淺唱寂寞╮ 提交于 2020-01-31 10:17:29
Iterator对象称为迭代器,迭代器是设计模式中的一种,主要用于遍历Collection集合中的元素。迭代器就是为集合而生的。 package day23_集合 ; import java . util . Arrays ; import java . util . Collection ; import java . util . Iterator ; public class class02_Iterator 遍历集合 { @SuppressWarnings ( "rawtypes" ) public static void main ( String [ ] args ) { Collection collection = Arrays . asList ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; Iterator iterator = collection . iterator ( ) ; while ( iterator . hasNext ( ) ) { System . out . println ( iterator . next ( ) ) ; } } } 来源: CSDN 作者: 熊云凡^_^ 链接: https://blog.csdn.net/weixin_42992842/article/details

Python的迭代器与生成器

依然范特西╮ 提交于 2020-01-31 04:42:37
#Python的迭代器与生成器 ##迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。 字符串,列表或元组对象都可用于创建迭代器: >> > list = [ 1 , 2 , 3 , 4 ] >> > it = iter ( list ) # 创建迭代器对象 >> > print ( next ( it ) ) # 输出迭代器的下一个元素 1 >> > print ( next ( it ) ) 2 >> > 迭代器对象可以使用常规for语句进行遍历: #!/usr/bin/python3 list = [ 1 , 2 , 3 , 4 ] it = iter ( list ) # 创建迭代器对象 for x in it : print ( x , end = " " ) 执行以上程序,输出结果如下: 1 2 3 4 也可以使用 next() 函数: #!/usr/bin/python3 import sys # 引入 sys 模块 list = [ 1 , 2 , 3 , 4 ] it = iter ( list ) # 创建迭代器对象 while True : try :