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

[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]

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

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

例子如下:

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

更复杂的如求矩阵:

#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)]
#简单的3行3列
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
#模拟
>>> for x in range(3):for y in range(3):print x,y
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1

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

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

经典例子:

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

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

#No1:原始方式:
>>> price=[]
>>> for item in books:for p in item:if p == 'price':price.append(item[p])>>> min(price)
23.699999999999999
#No2:列表解析:
>>> min([item[p] for item in books for p in item if p=='price'])
23.699999999999999

#Python相关书籍检索
for item in books:for p in item:if item['name'].find('Python')>=0:print item[p],  #24.7 Python核心编程 当当 55.7 深入Python 新华书店total = [item[p] for item in books for p in item if item['name'].find('Python')>=0]
print total #[24.699999999999999, u'Python\u6838\u5fc3\u7f16\u7a0b', u'\u5f53\u5f53', 55.700000000000003, u'\u6df1\u5165Python', u'\u65b0\u534e\u4e66\u5e97']

转载于:https://www.cnblogs.com/muzinan110/p/4920002.html

python列表解析相关推荐

  1. python列表解析的新方法

    python 列表解析我感觉是python非常灵活的一个地方,一开始接触它的时候,特别是之前学过其它的语言, 你会感觉很不习惯,怎么看怎么不对劲,老是觉的哪个地方怪怪的,这就是列表解析的魔力所在. p ...

  2. 列表解析python_基于Python列表解析(列表推导式)

    列表解析--用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...

  3. python 列表操作详解,Python列表解析操作实例总结

    本文实例讲述了Python列表解析操作.分享给大家供大家参考,具体如下: 列表解析 Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一 ...

  4. 不会但一定要了解的方面,python列表解析方式

    Python支持各种解析(comprehension)操作,比如列表解析.集合解析.元组解析.字典解析.它们根据某些元素来创建(推导)出一个新的列表.集合.元组.字典等.所以有的地方也称为推导,比如列 ...

  5. python天天向上代码解析-python列表解析和生成器表达式

    列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析.列表解析表达式为: [expr for iter_var in iterable] [expr for iter_var in iter ...

  6. Python 列表解析 大文件

    如果在一个4G的大文件test.log中提取里面有error的log: 大家第一想法就是通过打开文件然后每一行的查找,耗时19s import timestart_time = time.time() ...

  7. python列表解析([ x for x in list])

    转载至 列表解析 定义和说明 >Python 的强大特性之一是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个元素应用一个函数,从而将一个 list 映射为另一个 l ...

  8. python列表解析,生成表达式(一分钟读懂)

    如果想通过操作和处理一个序列来创建一个新的列表时,可以使用列表解析和生成表达式 区分就是 [ ] ( ) 1.列表解析 list comprehensions 2.生成表达式 a = [ i for ...

  9. python 列表解析

    2019独角兽企业重金招聘Python工程师标准>>> 1.生成行索引 2.过滤特殊行 1.生存行号 n [6]: [[i, k] for i, k in enumerate(ope ...

最新文章

  1. 企业单点登录解决方案(CAS)之二安装要求
  2. 【 FPGA 】半带 FIR 滤波器(Half-band FIR Filter)
  3. bgl 词典_器材屋 篇五十二:“哪里不会点哪里”的后时代——哪里不识扫哪里:科大讯飞扫描词典笔评测_点读机...
  4. SpringMVC-web.xml头代码
  5. python中遍历结构可以是哪些数据类型_全!Python基础之原生数据类型、判断和循环、函数和文件操作合集...
  6. 期货计算机撮合成交的原则,[期货知识]计算机撮合成交方式是什么?成交价形成方式有哪些 - 南方财富网...
  7. python selenium span内容读取_【程仁智推荐】Selenium自动化测试入门
  8. 0.5px边框,css及sass
  9. dell服务器怎么用u盘系统安装win7系统教程,戴尔DellU盘重装系统操作教程
  10. 170705、springboot编程之自定义properties
  11. 读李云同学的博文:无能的很可能正是我们自己
  12. c语言立体爱心会跳动,c语言编程实例——小球跳动
  13. si4463 WDS生成文件和参数配置的关系
  14. python实现证件照换底色
  15. 熟识 : 计算机文化(收藏)
  16. nginx+rtmp(或http-flv)+ffmpeg搭建流媒体视频直播服务器
  17. 计算机系统的组成中的软件部分
  18. PHP给微信二维码 添加背景和昵称 ,微信带参数海报跨坑记录。
  19. 【CSDN周赛第38期】Python题解
  20. zoj 2334 Monkey King

热门文章

  1. [tomcat7源码学习]结束Bootstrap进入Catalina
  2. 使用简单的轻量级移动web应用开发框架 - Sidetap
  3. 【翻译】Oracle不同版本之间Export Import的兼容性矩阵
  4. 如何区分直连串口线和交叉串口线?
  5. Ubuntu下如何用Empathy上QQ
  6. pytorch 维度变化的时候应该使用什么方法permute
  7. 面试常备题---链表总结篇
  8. Supporting Python 3(支持python3)——常见的迁移问题
  9. 并发编程11-测试并发程序
  10. php顺序、二分查找