转自 http://www.cnblogs.com/BeginMan/p/3164937.html

一、列表解析

列表解析来自函数式编程语言(haskell),语法如下:

  1. [expr for iter_var in iterable]
  2. [expr for iter_var in iterable if cond_expr]

第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

例子如下:

  1. >>> seq = [11,10,9,9,5,35,8,20,31,72,54,53]
  2. >>> filter(lambda x:x%2,seq)
  3. [11, 9, 9, 5, 35, 31, 53]
  4. >>> [x for x in seq if x%2]
  5. [11, 9, 9, 5, 35, 31, 53]

更复杂的如求矩阵:

  1. #3行5列的矩阵
  2. >>> [(x+1,y+1) for x in range(3) for y in range(5)]
  3. [(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)]
  4. #简单的3行3列
  5. >>> [(x,y) for x in range(3) for y in range(3)]
  6. [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
  7. #模拟
  8. >>> for x in range(3):
  9. for y in range(3):
  10. print x,y
  11.  
  12. 0 0
  13. 0 1
  14. 0 2
  15. 1 0
  16. 1 1
  17. 1 2
  18. 2 0
  19. 2 1

计算一个文件的字数和大小:

  1. >>> import os
  2. >>> f = open('demo.txt','r')
  3. >>> #计算单词的个数
  4. >>> len([word for line in f for word in line.split()])
  5. 1942
  6. >>> #计算文件大小
  7. >>> os.stat('demo.txt').st_size
  8. 14051L
  9. >>> f.seek(0) #seek()函数回到文件头部,因为迭代器已经访问完了文件的所有行
  10. >>> sum([len(word) for line in f for word in line.split()])
  11. 10806
  12. >>> f.close()
  13. >>>

经典例子:

  1. books=[
  2. {"name":u"C#从入门到精通","price":23.7,"store":u"卓越"},
  3. {"name":u"ASP.NET高级编程","price":44.5,"store":u"卓越"},
  4. {"name":u"Python核心编程","price":24.7,"store":u"当当"},
  5. {"name":u"JavaScript大全","price":45.7,"store":u"当当"},
  6. {"name":u"Django简明教程","price":26.7,"store":u"新华书店"},
  7. {"name":u"深入Python","price":55.7,"store":u"新华书店"},
  8. ]

1、书籍信息中价格最低的

  1. #No1:原始方式:
  2. >>> price=[]
  3. >>> for item in books:
  4. for p in item:
  5. if p == 'price':
  6. price.append(item[p])
  7.  
  8. >>> min(price)
  9. 23.699999999999999
  10. #No2:列表解析:
  11. >>> min([item[p] for item in books for p in item if p=='price'])
  12. 23.699999999999999
  1. #Python相关书籍检索
  2. for item in books:
  3. for p in item:
  4. if item['name'].find('Python')>=0:
  5. print item[p], #24.7 Python核心编程 当当 55.7 深入Python 新华书店
  6.  
  7. total = [item[p] for item in books for p in item if item['name'].find('Python')>=0]
  8. print total #[24.699999999999999, u'Python\u6838\u5fc3\u7f16\u7a0b', u'\u5f53\u5f53', 55.700000000000003, u'\u6df1\u5165Python', u'\u65b0\u534e\u4e66\u5e97']

二、生成器表达式

1、为什么要用到它?

2、它与列表解析的区别?

《转》python 12 列表解析的更多相关文章

  1. (转)python高级:列表解析和生成表达式

    一.语法糖的概念 “糖”,可以理解为简单.简洁,“语法糖”使我们可以更加简洁.快速的实现这些功能. 只是Python解释器会把这些特定格式的语法翻译成原本那样复杂的代码逻辑 我们使用的语法糖有: if ...

  2. Python 的列表解析和生成表达式的异同

      Python中的列表解析和生成表达式是非常好的特性,他们的形式相似,但是应用场景不太一样. 相似点 列表解析和生成表达式最大的相似点是使用形式: [expr for iter_var in ite ...

  3. Python 嵌套列表解析

    将一个3*4矩阵转为4*3矩阵Matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],]afterMatrix = [[row[i] for ro ...

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

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

  5. 《转》python学习(12)-列表解析

    转自 http://www.cnblogs.com/BeginMan/p/3164937.html 一.列表解析 列表解析来自函数式编程语言(haskell),语法如下: [expr for iter ...

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

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

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

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

  8. python 列表解析

    列表解析,主要用于动态创建列表 本篇主要说一下,lambda.map().和filter()同列表解析语句之间结合的用法 列表解析的基本语法为:[expr for iter_var in iterab ...

  9. Python 迭代器之列表解析

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

随机推荐

  1. 记录解决java.io.IOException: Server returned HTTP response code: 500 for URL:xxxxxxxx

    踩坑经历 因为项目需要去对接别的接口,使用URLConnection POST请求https接口,发送json数组时遇到java.io.IOException: Server returned HTT ...

  2. JS互相调用

    JS互相调用 例1: <html> <head> <meta charset="UTF-8"> <script type="te ...

  3. java程序中线程cpu使用率计算

    原文地址:https://www.imooc.com/article/27374 最近确实遇到题目上的刚需,也是花了一段时间来思考这个问题. cpu使用率如何计算 计算使用率在上学那会就经常算,不过往 ...

  4. 19、Page Object 实例

    项目目录介绍: CalcuatorPage.java文件代码: package example; import io.appium.java_client.android.AndroidDriver; ...

  5. 【转】Linux系统抓包命令tcpdump使用实例

    tcpdump是linux命令行下常用的的一个抓包工具,记录一下平时常用的方式,测试机器系统是ubuntu 12.04. tcpdump的命令格式tcpdump的参数众多,通过man tcpdump可 ...

  6. vue-router 路由配置

    前提: 项目由 vue-cli 脚手架创建. 首先,先下载 vue-router npm install vue-router 安装完成后,运行项目 npm run dev 打开 main.js , ...

  7. 剑指offer——74求1+2+3+n

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C).   题解: 利用类的构造和析构 //利用类的构 ...

  8. 【非官方方式】获取Disconf动态更新的配置文件的值

    disconf可以配置reload,当更改配置时自动刷新classpath下的配置文件.然而获取最新的值官方说明是加@DisconfFileItem注解放在属性的方法上,底层通过拦截器获取的. 但是每 ...

  9. Spring MVC源码分析(三):SpringMVC的HandlerMapping和HandlerAdapter的体系结构设计与实现

    概述在我的上一篇文章:Spring源码分析(三):DispatcherServlet的设计与实现中提到,DispatcherServlet在接收到客户端请求时,会遍历DispatcherServlet ...

  10. html5本地存储(三)--- 本地数据库 indexedDB

    html5内置了2种本地数据库,一是被称为“SQLLite”,可以通过SQL语言来访问文件型SQL数据库.二是被称为“indexedDB” 的NoSQL类型的数据库,本篇主要讲indexedDB数据库 ...