迭代器为类序列对象提供了一个类序列的接口。Python 的迭代无缝的支持序列对象,而且还允许程序猿迭代非序列类型,包括用户定义的对象。

  迭代器是一个next()方法的对象,而不是通过索引计数。当需要下一项时,调用迭代器(Iterator)的next()方法就可以获得。条目全部取出后,会引发一个StopIterration 异常。这并不表示错误发生,只是表示迭代完成。迭代器不能向后移动,不能回到开始,也不能复制一个迭代器。

eg.

>>> myTupe = (123,'xyz',45.67)
>>> i = iter(myTupe)
>>> next(i)      在python2中方法为,i.next()
123  
>>> next(i)
'xyz'
>>> next(i)
45.67
>>> next(i)
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
next(i)
StopIteration
再实际应用中,需要将代码放在一个try-except 块中。

fetch = iter(seq)

while True::

  try:

    i  =  next(fetch)

  except StopIteration:

    break

  do_something_to(i)

注:for 循环会自动调用迭代器的next()方法,以及见识StopIteration异常。

一般的迭代对象有序列,字典和文件。迭代

二、列表解析

列表解析用来动态的创建列表。

列表解析语法:[expr for iter_var in iterable]

语句核心是for循环,它迭代iterable 对象的所有条目。例如:

>>> [x**2 for x in range(6)]
[0, 1, 4, 9, 16, 25]
扩展语法 :[expr for iter_var in iterable if cond_expr]

>>> seq = [11,1,9,9,10,10,9,7,23,9,7,18,12,11,12]
>>> [x for x in seq if x%2 
[11, 1, 9, 9, 9, 7, 23, 9, 7, 11]
>>>

迭代一个有3行5列的矩阵:

>>> [(x+1,y+1) for x in range(3) for y in range(5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]

加入有一个文件test.txt,需要统计单词书

But of course now I don not get any credit for sticking with the girls all this time.
Like I said, Bryce is the most popular kid in our grade, so that leaves all the
rest of us guys scrambling for the other spots.
The best I can figure is that I am somewhere around 52nd or 53rd most popular
this year. But the good news is that I am about to move up one spot because
Charlie Davies is above me, and he is getting his braces next week

>>> with open(r'E:\test.txt','r') as f:
len([word for line in f for word in line.split()])

output:86

统计单词个数:

>>> with open(r'E:\BaiduNetdiskDownload\test.txt','r') as f:
sum([len(word) for line in f for word in line.split()])

>>>344

生成器表达式:

生成器和列表解析非常相似,基本语法相同。不过生成器不真正创建数字列表,二十返回一个生成器,每计算一个条目,把这个条目“产生”(yield)出来。所以生成器在内存上更有效。

列表解析:【expr for iter_var in iterable if cond_expr】

生成器表达式 (expt for  iter_var in iterable if cond_expt)

上例中求飞空字符的个数:

>>> with open(r'E:\BaiduNetdiskDownload\test.txt','r') as f:
sum(len(word) for line in f for word in line.split())

>>> 344

用生成式计算。它会计算每个单词的长度后传递给sum()函数。

python学习-迭代器,列表解析和列表生成式的更多相关文章

  1. Python学习系列(四)(列表及其函数)

    Python学习系列(四)(列表及其函数) Python学习系列(一)(基础入门) Python学习系列(二)(基础知识) Python学习系列(三)(字符串) 一.基本概念 1,列表是什么?     ...

  2. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  3. Python中的列表解析和列表推导是一回事吗?

    列表解析和列表推导就是一个意思,只是从英文"list comprehension"翻译过来的不同翻译方法. 列表解析就是通过解析表达式从一个可迭代对象生成一个新的列表的Python ...

  4. Python学习笔记(迭代,列表解析,生成器)

    迭代(iterable):支持每次返回自己所包含一个对象的 iter()得到迭代器,.next()遍历列表. 列表解析:根据已有列表高效生成列表的方式. 生成器(Generator): 通过列表生成式 ...

  5. python 学习笔记(一):在列表、字典、集合中根据条件筛选数据

    一.在列表中筛选数据 在列表中筛选出大于等于零的数据,一般通用的用法代码如下: data = [3, -9, 0, 1, -6, 3, -2, 8, -6] #要筛选的原始数据列表 result = ...

  6. python学习笔记二--列表

    一.列表: 1. 任意类型对象的位置相关的有序集合. 2. 没有固定大小. 3. 对偏移量进行赋值及各种方法的调用,修改列表. 4. 列表是序列的一种. 5. 所有对字符串的序列操作对列表均适用. 二 ...

  7. Python学习笔记(4)列表

    2019-02-26 列表(list):①创建方法:用‘[ ]’,将数据包括起来,数据之间用逗号隔开.②空列表:empty = []③增删改查: 1)增加: a.append()方法——将元素添加到列 ...

  8. Python学习之路:关于列表(List)复制的那点事

    要谈列表的复制,我们就要谈到Python的赋值规则 首先我们创建列表a: a = [1,2,3] 通常我们复制一个元素的方法是这样的: b = a #复制元素的一般方法 print(a) print( ...

  9. python学习(7)关于列表操作相关命令以及浅复制深复制

    在python中,[]表示的是列表.列表有各种操作命令. 1.append()方法,添加一个元素到列表尾部. 注意append()方法与extend()方法有区别:list.append(object ...

随机推荐

  1. 亚马逊促销活动Promotion②:Money Off(满减折扣)的设置教程

    满减.折扣是放之四海皆有效的促销手段,虽然亚马逊对卖家有诸多限制,但这个促销方式却是允许的,对亚马逊的卖家而言,这对提升商品销量.打造爆款都是极好的.今天小编来讲讲亚马逊的Money Off要怎么设置 ...

  2. jmeter 上传附件 如图片

    1.要勾选 Use multipart/form-data for POST,否则request中将不包含上传的文件 2.MIME类型为application/octet-stream 图如下:对应 ...

  3. 『超分辨率重建』从SRCNN到WDSR

    超分辨率重建技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像.SR可分为两类:    1. 从多张低分辨率图像重建出高分辨率图像    2. 从单张低分辨率图 ...

  4. jemter分布式部署及linux下分布式脚本执行

    jmeter进行接口性能测试,占用内存较大,在模拟千万计并发用户时,使用分布式部署进行分压测试. 操作步骤:选择一台机器作为调度机,其他机器作为执行机 一.jmeter分布式部署 前提条件:A.执行机 ...

  5. Flask Vue.js全栈开发

    Flask Vue.js全栈开发的 最新完整代码 及使用方式 本系列的最新代码及使用方式将持续更新到: http://www.madmalls.com/blog/post/latest-code/ 1 ...

  6. php中把美国时间转为北京时间的自定义

    我的服务器北京时间,php调用的时间: date.timezone ="America/Chicago" 这是美国这边的一个时间,有的时候跟北京相差13个小时,有的时候跟北京时间相 ...

  7. PHP的json_encode()函数与JSON对象

    一.问题描述 这周搬砖的时候,前端通过ajax获取后端的数据后,照例用 对象.属性 的方式取值,然而结果总是总是不能如预期般展示在页面上. 先写个 demo 还原下场景:选中一个下拉框列表选项后,会在 ...

  8. awk 中的难懂符号解释

    awk中NF和NR的意义,其实你已经知道NF和NR的意义了,NF代表的是一个文本文件中一行(一条记录)中的字段个数,NR代表的是这个文本文件的行数(记录数). 看个例子: cal 9 2003 Sep ...

  9. CouchDB客户端开发—Java版

    在Fedora上安装CouchDB: yum update yum install couchdb 修改/etc/couchdb下local.ini文件: port = 5984bind_addres ...

  10. unity中EventTrigger组件的应用

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using D ...