Python 迭代器和列表解析

1)迭代器

 一种特殊的数据结构,以对象形式存在
>>> i1 = l1.__iter__()
>>> i1 = iter(l1)
可迭代对象:
序列: list、str、tuple
非序列: dict、file
自定义类: __iter__()、 __getitem__()
注意:
若要实现迭代器,需要在类中定义next()方法
要使迭代器指向下一个对象,则使用成员函数 next()
i1.next()
当没有元素时,会引发StopIteration异常
for循环可用于任何可迭代对象 例: >>> l1 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
>>> i1 = l1.__iter__()
>>> il.next()
'Sun'
>>> il.next()
'Mon'

2)列表解析 [ ]

根据已有列表,高效生产新列表的方式。 常用于实现创建新的列表,因此要放置于 [ ] 中
语法:
[ expression for iter_var in iterable ]
[ expression for iter_var in iterable if cond_expr ] os模块中 listdir() 能够列出所有文件
例:事先定义l1 l2 l1 = [ 1,2,3,4,5 ] l2=[ ]
>>> for i in l1:
l2.append(i**2) l2列表内各项为l1的平方
>>> print l2
[1, 4, 9, 16, 25] >>> l3 = [ i**2 for i in l1 ] l3列表内各项为l1的平方
[1, 4, 9, 16, 25] >>> l4 = [ i**2 for i in l1 if i>=3 ] l3列表内各项为l1中 >= 3的平方
[9, 16, 25] 例题: l1 = ['x','y','z'] l2 = [1,2,3] 应用列表解析方法使其各项相乘 >>> l3 = [ (i,j) for i in l1 for j in l2 ] for循环内部嵌套一个for循环实现各项乘
[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]

3)生成器 ( )

    惰性计算、延迟求值
生成器表达式并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目产生出来(一次返回一个值)
语法:
( expr for iter_var in iterable )
( expr for iter_var in iterable if cond_expr ) 例: >>> l1 = ( i**2 for i in range(2,11,2))
>>> l1.next()
2
>>> l1 = ( i**2 for i in range(2,11) if i%2==0 )
>>> l1.next()
2
注意:
序列过长,并且每次只获取一个元素时,应当考虑使用生成器表达式而不是列表解析
列表解析与生成器的关系相当于range()与xrange()

4)产生偏移和元素

    enumerate
同时偏移缩印和偏移元素,使用enumerate()函数
此内置函数返回一个生成器对象
>>> S = 'Hello,world'
>>> a = enumerate(S)
>>> a.next()
(0,'H')
>>> a.next()
(1,'e')

Python 迭代器和列表解析的更多相关文章

  1. 3、Python迭代器、列表解析及生成器(0530)

    1.动态语言 sys.getrefcount()    //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...

  2. Python(五)之迭代器和列表解析

    Python迭代器和列表解析 迭代器 例如: In [1]: l1 = [1,2,3,4,5] dir(i1)可以看到内置方法'__iter__' 生成一个迭代器: l1.__iter__,或i2 = ...

  3. Python 迭代器之列表解析与生成器

     [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...

  4. julia与python中的列表解析.jl

    julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...

  5. Python中的列表解析和生成器表达式

    Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...

  6. Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式

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

  7. python学习-迭代器,列表解析和列表生成式

    迭代器为类序列对象提供了一个类序列的接口.Python 的迭代无缝的支持序列对象,而且还允许程序猿迭代非序列类型,包括用户定义的对象. 迭代器是一个next()方法的对象,而不是通过索引计数.当需要下 ...

  8. Python 迭代器之列表解析

     [TOC] 尽管while和for循环能够执行大多数重复性任务, 但是由于序列的迭代需求如此常见和广泛, 以至于Python提供了额外的工具以使其更简单和高效. 迭代器在Python中是以C语言的 ...

  9. python 中的列表解析和生成表达式 - 转

    优雅.清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(  List comprehensions)和生成表达式,通过这两 ...

随机推荐

  1. sendemail 发送成功Email was sent successfully!邮箱却收不到邮件

    在测试sendemail的时候,发现好多次明明提示已经发送成功了,但是邮箱却一直收不到邮件. 查询了好多资料,主要原因有两个 1.如果Linux是sentos的话,主要是防火墙iptables和sel ...

  2. 使用FileSystem自带的api读取hdfs中的文件

    博客搬家自https://my.oschina.net/itsyizu/blog/ 1. 创建hadoop MapReduce项目 输入项目名称 创建好的项目初始化状态如下 编写java类 impor ...

  3. 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?

    在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...

  4. motor和servo

    程序简单易读,不再做注释 motor.py from gpiozero import Motor from gpiozero import LED led = LED(2) motor = Motor ...

  5. (中级篇 NettyNIO编解码开发)第八章-Google Protobuf 编解码-1

    Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,这里一起回顾一下Protobuf    的优点.(1)在谷歌内部长期使用,产品成熟度高:(2)跨语言,支持 ...

  6. struts2.1.6教程十、类型转换

    建立struts2conversion项目,并搭建好struts2的基本开发环境 1.基于Action的直接属性转换 建立t.jsp页面,内容如下: <s:form action="p ...

  7. 使用gzip优化web应用(filter实现)

    相关知识: gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户端加载后渲染呈现,这种情况文件一般都比较大,如果 ...

  8. RFM模型——构建数据库营销的商业战役!(转)

    RFM模型:R(Recency)表示客户最近一次购买的时间有多远,F(Frequency)表示客户在最近一段时间内购买的次数,M (Monetary)表示客户在最近一段时间内购买的金额.一般原始数据为 ...

  9. redis3.2.6 集群安装

    下载   [root@localhost ~]# cd /usr/local/src/ [root@localhost src]# wget http://download.redis.io/rele ...

  10. 从零自学Hadoop(23):Impala介绍及安装

    阅读目录 序 介绍 安装 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇, ...