Python 迭代器和列表解析

1)迭代器

  1. 一种特殊的数据结构,以对象形式存在
  2. >>> i1 = l1.__iter__()
  3. >>> i1 = iter(l1)
  4. 可迭代对象:
  5. 序列: liststrtuple
  6. 非序列: dictfile
  7. 自定义类: __iter__()、 __getitem__()
  8. 注意:
  9. 若要实现迭代器,需要在类中定义next()方法
  10. 要使迭代器指向下一个对象,则使用成员函数 next()
  11. i1.next()
  12. 当没有元素时,会引发StopIteration异常
  13. for循环可用于任何可迭代对象
  14. 例: >>> l1 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
  15. >>> i1 = l1.__iter__()
  16. >>> il.next()
  17. 'Sun'
  18. >>> il.next()
  19. 'Mon'

2)列表解析 [ ]

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

3)生成器 ( )

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

4)产生偏移和元素

  1. enumerate
  2. 同时偏移缩印和偏移元素,使用enumerate()函数
  3. 此内置函数返回一个生成器对象
  4. >>> S = 'Hello,world'
  5. >>> a = enumerate(S)
  6. >>> a.next()
  7. (0,'H')
  8. >>> a.next()
  9. (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. windows 上优雅的安装 node 和 npm

    windows 的一键安装包,应该是最简单的 node 安装方式. 其实很多软件,拷贝过来就可以运行,根本不需要所谓的"安装"过程. 新建一个目录专门了管理 node 和 npm  ...

  2. Spring-web中的web.xml为Servlet提供的配置选项说明

    配置Servlet时可以设置的一些初始化参数,总结如下: ContextAttribute: 在ServletContext的属性中,要用作WebApplicationContext的属性名称. Co ...

  3. springboot 中使用websocket简单例子

    gradle 中添加依赖,引入websocket支持 compile("org.springframework.boot:spring-boot-starter-websocket:${sp ...

  4. 纯CSS3向右循环闪过效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. (原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

    这个例子需要建三个Maven项目,其中一个为父项目,另外两个为子项目 首先,建立父项目testParent,选择quickstart: 输入项目名称和模块名称,然后创建: 然后建立子项目testInt ...

  6. Predix Asset Service深度分析

    前言 在IIOT领域,面临着保存海量数据的挑战,具体到Asset层面,则要保存物理对象,逻辑对象,复杂的关系,并支持对象间的组合,分类,标签和高效查询.总结来说,可以归纳为如下几种需求:   灵活的建 ...

  7. Python+requests库 POST接口图片上传

    捕获到POST接口的请求参数,如下: 包括data.file两个部分,上传代码如下: 比较简单,直接发送files参数即可 heads中 content-type 折腾了1个小时,呵呵

  8. Unable to find 'struts.multipart.saveDir' property setting.

    今天在项目开发中遇到如下问题 项目使用的是struts2 Unable to find 'struts.multipart.saveDir' property setting. 后来在网上查询特此记录 ...

  9. java基础(十四章)

    1.Java中的包(package) 2.1 包,对应到磁盘中的文件夹 2.2 新建一个class,默认保存在缺省包中 2.3 声明包的关键字:package package语句,置顶位置 2.4 导 ...

  10. maven无法加载本地jar包以及maven项目打包后本地jar包没有打进项目的问题解决办法

    1.首先设置依赖项,这样maven就会把该路径下的jar包导入项目引用 <dependency> <groupId>DPSDK-Manager</groupId> ...