迭代

在Python中,如果给定一个list或者touple,我们可以通过for循环来遍历,将值依次取出,这种遍历称为迭代。

在Python中是通过for...in..来进行遍历的,在Java中则是通过下标来遍历 for(int i;i<length;i++){},Python作为解释性语言,在语法上是十分简单的,可以遍历数组集合,也可以遍历字典。看下面的例子:

for name in names:
print(name) person = {'name': '张三', 'age': 14, 'sex': '男'} for key in person:
print(key)
for value in person.values():
print(value)
for item in person.items():
print(item) for i, value in enumerate(names):
print(i, value)

遍历一个list或者touple使用for..in..,也可以直接遍历字典的key或者value或者字典里地item,同样地如果我们需要跟其他语言中的那样的下标的话,我们可以使用for i,xx in .. 来获取下标,由此呢,我们也可以进行引用多个变量来进行迭代,例如将key和value值全部分别遍历,可以使用for key, value in dic.item 来进行遍历,使用起来是非常灵活地。

迭代器

     list,dict,str等数据类型都可直接使用for循环遍历,这些被称为可迭代对象:Iterable,而生成器不但可以使用for循环遍历,还可以调用next()函数不断的调用返回下一个值,直到最后抛出StopIteration错误无法返回下一个值,这种可以被next()函数不断调用返回下一个值的对象称为迭代器:Iterator。

生成器都是iterator对象,但是list,dict,str等数据类型却不是迭代器,因为迭代器都是可以被next()函数调用不断地返回下一个值,它的大小是未知的,它需要生成了下一个值才会计算。我们可以使用iter()函数将这些可迭代对象变成迭代器。

上面提到了生成器,生成器是什么呢?

我们先来看下列表生成式。我们生成一个列表,可以这样做:

生成一个1-9的平方值的列表

L=[]

for x in range(1,10):

L.append(x*x)

如果用列表生成式可以是这样:L=[x*x for x in range(1,10)],同时我们还可以加一些判断,比如我只想要偶数的平方值,可以在后面加个if判断。了解了列表生成式,我们在看下生成器。

最简单地创建生成器的方式,L=(x*x for x in range(1,10)),将[]换成(),那么完成后的区别在哪里呢?

如果是列表生成式,我执行了一个列表生成式,它会根据生成式的条件立即生成一个列表,然后我可以对这个列表进行遍历(迭代),这也就是上面说的list是可迭代对象;

如果它是个生成器,我运行了后它不会立即生成一个我想要的列表,它比较懒,它会在我需要的时候跟我生成一个我想要的值,什么时候是我需要的呢,就是调用next()函数的时候,通过next()函数获得生成器的下一个返回值,直到最后一个元素,没有值了抛出StopIteration错误。它里面保存的不是计算好的值,而是计算的算法,每次需要的时候给计算出来。

可以作用于for循环遍历的对象都是可迭代对象

可以作用于next()函数的对象都是迭代器对象

我也学的有点蒙圈,暂时先这样理解,在今后用的地方多了加深对这方面的理解。

人生苦短之Python迭代器的更多相关文章

  1. Python迭代器,可迭代对象,生成器

    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...

  2. python迭代器与iter()函数实例教程

    python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...

  3. Python 迭代器和列表解析

    Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...

  4. Python迭代器,生成器--精华中的精华

    1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...

  5. Python 迭代器和生成器(转)

    Python 迭代器和生成器 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的, ...

  6. 一文搞懂Python迭代器和生成器

    很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...

  7. Python - 迭代器与生成器 - 第十三天

    Python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...

  8. python迭代器,生成器

    1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...

  9. 怎么理解Python迭代器与生成器?

    怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list.tuple.set和dict数据类型进行迭代,可以把所有数据都过滤出来.如下:         ...

随机推荐

  1. 第4章 使用 Spring Boot

    使用 Spring Boot 本部分将详细介绍如何使用Spring Boot. 这部分涵盖诸如构建系统,自动配置以及如何运行应用程序等主题. 我们还介绍了一些Spring Boot的最佳实践(best ...

  2. redis 延迟消息

    1.查询下redis 是否打开了键空间通知功能 发现打开了,如果没有打开可以在执行下 我们可以看到参数设置 2.订阅下键空间或者事件通知 订阅键空间:subscribe __keyspace@0__: ...

  3. cookie读取设置name

    cookie就是k-v形式,可以理解为一个hashmap cookie就是k-v形式,可以理解为一个hashmap cookie就是k-v形式,可以理解为一个hashmap 建立一个无生命周期的coo ...

  4. SpringUtils写法

    @Componentpublic class SpringUtils implements ApplicationContextAware { @Override public void setApp ...

  5. ajax——dom对xml和html的操作

    上篇文章说到了dom的基础,dom能够操作xml和html,这次主要写利用dom的api去如何去操作xml和html文档. dom操作xml dom操作xml文档之前必须把xml文档装载到xml do ...

  6. G 全然背包

    <span style="color:#3333ff;">/* /* _________________________________________________ ...

  7. 无法获取html元素宽高度的问题

    今天遇到了xxx.style.width无法获取元素宽度的问题,原来一直没有注意到这个小细节: 1)如果width:120px:是写在样式表里面的,获取宽度或者高度的方法是: xxx.offsetWi ...

  8. android相关文件夹的存取方式与函数解析---全

    因为排版问题.转为markdown编辑: http://blog.csdn.net/self_study/article/details/58587412

  9. C语言关键字—-sizeof 、typedef、const、static、register、extern、#define

    关键字:sizeof .#define.typedef.const.static.register.extern sizeof 1. 作用:求数据所占得内存空间大小 2. 本质:求数据得类型所占的内存 ...

  10. 超越MySQL:三个流行MySQL分支的对比(转)

    导读:尽管MySQL是最受欢迎的程序之一,但是许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长.该 需求以及Oracle对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的 ...