《转》python学习(12)-列表解析
转自 http://www.cnblogs.com/BeginMan/p/3164937.html
一、列表解析
列表解析来自函数式编程语言(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()
>>>
经典例子:
books=[
{"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']
二、生成器表达式
1、为什么要用到它?
2、它与列表解析的区别?
《转》python学习(12)-列表解析的更多相关文章
- Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
- julia与python中的列表解析.jl
julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...
- Python 迭代器和列表解析
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...
- Python中的列表解析和生成器表达式
Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...
- 《转》python 12 列表解析
转自 http://www.cnblogs.com/BeginMan/p/3164937.html 一.列表解析 列表解析来自函数式编程语言(haskell),语法如下: [expr for iter ...
- python 中的列表解析和生成表达式 - 转
优雅.清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两 ...
- Python 迭代器之列表解析
 [TOC] 尽管while和for循环能够执行大多数重复性任务, 但是由于序列的迭代需求如此常见和广泛, 以至于Python提供了额外的工具以使其更简单和高效. 迭代器在Python中是以C语言的 ...
- Python中的列表解析和生成表达式
摘要:优雅.清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过 ...
- Python 迭代器之列表解析与生成器
 [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...
- 3、Python迭代器、列表解析及生成器(0530)
1.动态语言 sys.getrefcount() //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...
随机推荐
- Lucene系列一:搜索引擎核心理论
一.为什么需要搜索引擎 问题1:数据库索引的原理是怎样的? 索引原理:对列值创建排序存储,数据结构={列值.行地址}.在有序数据列表中就可以利用二分查找快速找到要查找的行的地址,再根据地址直接取行数据 ...
- (原)从mp4,flv文件中解析出h264和aac,送解码器解码失败
转载请注明出处:http://www.cnblogs.com/lihaiping/p/5285166.html 今天在做本地文件解码测试,发现从mp4,flv文件中读出来的帧数据,h264和aac帧直 ...
- android http json请求3种不同写法
第一种: public static String invoke() { String result = null; try { final Str ...
- XML中二进制数据的处理方法
原文链接:http://www.west263.com/www/info/22308-1.htm 在xml中,所有的数据都是以文本的形式来显示,但是二进制数据不能直接以文本格式来表示,那xml又是怎么 ...
- ssh命令详解3
SSH 的详细使用方法如下: ssh [-l login_name] [hostname | user@hostname] [command] ssh [-afgknqtvxCPX246] [-c b ...
- oracle装载表是什么?
oracle装载表即通过sqlloader的方式导入数据. Oracle 的SQL*LOADER可以将外部数据加载到数据库表中.下面是SQL*LOADER的基本特点: 1)能装入不同数据类型文件及多个 ...
- linux mount 挂接新硬盘
1.先用fdisk -l查看一下,先加入的外设地址名称 2. #fdisk /dev/sdb进入fdisk模式:Command (m for help):p //查看新硬盘的分区Command ( ...
- UNIX环境编程学习笔记(20)——进程管理之exec 函数族
lienhua342014-10-07 在文档“进程控制三部曲”中,我们提到 fork 函数创建子进程之后,通常都会调用 exec 函数来执行一个新程序.调用 exec 函数之后,该进程就将执行的程序 ...
- scp 链接文件的问题 + tar
将本地的文件上传到服务器上,希望保持相对链接关系.(链接文件和被链接文件都在同一的目录下) 使用scp进行传输时,链接关系不会保存,所以需要解决下.(当然可以使用rsync或tar解决,但是rsync ...
- flask with gae开发小结
最近因为要重写之前发布在GAE上的一个博客,又回顾了一下python,同时,因为用的flask,gae等等,一道写一些小总结,供日后查阅. 1, slugify 其实这个问题可以不考虑,只要你愿意用中 ...