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. SPRING AOP ....0 can't find referenced pointcut

    下载最新的aspectjweaver就可以了,因为JDK的版本的问题不兼容. //织入点语法 @Pointcut("execution(public * com.frank.dao..*.* ...

  2. R语言-混合型数据聚类

    利用聚类分析,我们可以很容易地看清数据集中样本的分布情况.以往介绍聚类分析的文章中通常只介绍如何处理连续型变量,这些文字并没有过多地介绍如何处理混合型数据(如同时包含连续型变量.名义型变量和顺序型变量 ...

  3. centos6.5 修改java环境变量

    [root@m1 ~]# cat /etc/profile export JAVA_HOME=/usr/local/soft/jdkexport PATH=$JAVA_HOME/bin:$PATH e ...

  4. zepto源码分析系列

    如果你也开发移动端web,如果你也用zepto,应该值得你看看.有问题请留言. Zepto源码分析-架构 Zepto源码分析-zepto(DOM)模块 Zepto源码分析-callbacks模块 Ze ...

  5. 如何编写Hexo主题

    完成一个Hexo的主题其实很简单,和写静态页面差不多,只是内容部分通过Hexo的变量去获取,而且Hexo还内置了一些辅助函数帮你快速方便地完成繁琐的处理. 起步 在写代码之前要先把项目结构搭建好,一个 ...

  6. hdu5803

    hdu5803 题意 给出四个整数 A B C D,问有多少个四元组 (a, b, c, d) 使 a + c > b + d 且 a + d >= b + c ,0 <= a &l ...

  7. Akka(5): ConsistentHashing Router - 可选定Routee的任务分配模式

    上一篇讨论里我们介绍了几种任务分配(Routing)模式.Akka提供的几种现成智能化Routing模式大多数是通过对用户屏蔽具体的运算Routee选择方式来简化Router使用,提高智能程度,所以我 ...

  8. 在ie下,a标签包被img的时候,为什么有个蓝色的边线

    效果像下图这样 那是由于<img>在ie下有默认边框,只要清除边框就可以了,在style中定义 img{ border:none } 显示效果就变成下面这样了 完!

  9. Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置

    Java Web学习(四)Eclipse与Maven整合配置 一.准备工作 1.Tomcat 8.5.15 2.Maven3.5 3.Eclipse Neon.3 Release (4.6.3) 二. ...

  10. html逻辑运算符

    逻辑运算符 逻辑运算符用于测定变量或值之间的逻辑. 给定 x=6 以及 y=3,下表解释了逻辑运算符: &&and(x < 10 && y > 1) 为 t ...