python-cookbook学习笔记四
来源:互联网 发布:怎样成为淘宝摄影师 编辑:程序博客网 时间:2024/06/05 08:09
过滤序列元素:
有一个序列,想从其中过滤出想要的元素。最常用的办法就是列表过滤:比如下面的形式:这个表达式的意义是从1000个随机数中选出大于400的数据
test=[]for i in range(1000): test.append(random.randint(1,1000))ret=[n for n in test if n >400]
根据cookbook书上的描述,这个方法适用于小数据的方式。如果数据集非常的大,而且要考虑内存的话建议使用生成器的方式ret=(n for n in test if n >400)
def filter_data(n): start=time.time() test=[] for i in range(n): test.append(random.randint(1,n)) ret=[n for n in test if n >400] end=time.time() print 'Time using list iterater is %s' % (end-start) start=time.time() test=[] for i in range(n): test.append(random.randint(1,n)) ret=(n for n in test if n >400) end=time.time() print 'Time using generater is %s' % (end-start)
我们先看下n=1000的运行结果:
filter_data(1000)时间都差不多,看不出差别
N=10000的运行结果 用生成器要少于列表过滤的方法
filter_data(10000)
N=100000的运行结果 差距进一步拉大
filter_data(100000)
可以看出随着数据的扩大,确实生成器更能节省时间。
如果我们有两个列表,一个是存储信息的,一个是存储该信息的特征值的时候。我们想吧满足某种特征值的信息提取出来该如何操作呢。这里有个过滤工具itertools.compress
假设我们有下列数据,address存放的是具体的地址信息,count值对应的是各个地址信息的特征值。两者的索引是一一对应
addresses = ['5412 N CLARK','5148 N CLARK','5800 E 58TH','2122 N CLARK''5645 N RAVENSWOOD','1060 W ADDISON','4801 N BROADWAY','1039 W GRANVILLE',] counts=[0,3,10,4,1,7,6,1]
如果我们想把特征值大于5的地址信息提取出来。其实方法也比较简单,如下是没有依赖任何模块的写法,也就是通过两个列表一一判断。
for i in range(len(addresses)): if counts[i] >= 5: tmp.append(addresses[i])print tmp
compress的用法如下:首先生成一个feature的列表,这个feature列表根据生成式生成一个满足条件的过滤表。然后调用compress,第一个参数是原始数据,第二个参数是过滤条件。
feature=[n>=5 for n in counts]print featureprint list(compress(addresses,feature))
两种方法比较,如果过滤条件已经具备,那么使用compress更方便一些。否则从我个人感觉来看没有什么差别。
0 0
- python-cookbook学习笔记四
- Python cookbook 学习笔记一
- python cookbook 学习笔记--1
- [pyhton]python cookbook学习笔记
- python-cookbook学习笔记一
- python-cookbook学习笔记二
- python-cookbook学习笔记三
- python-cookbook学习笔记五
- python-cookbook学习笔记六
- python-cookbook学习笔记七
- python-cookbook学习笔记十一
- 《PHP Cookbook》学习笔记(四)
- python技巧(2):--python cookbook学习笔记
- python技巧(3)--python cookbook学习笔记
- python技巧(4)----python cookbook学习笔记
- Python技巧(6):cookbook学习笔记
- python-cookbook学习笔记十 迭代器 三
- python cookbook学习笔记十二:XML解析
- 学习笔记之《Android项目实战——手机安全卫士》
- L1-036. A乘以B
- HDU
- Python Faster R-CNN 安装配置记录
- L1-004简单题
- python-cookbook学习笔记四
- 矩阵中是否出现某一条路径
- 宏和函数的区别
- L1-037. A除以B
- 经典排序算法
- JAVA线程安全与非线程安全
- 1060: 填报志愿 [水题]
- 自定义无限轮播ViewPager的实现
- Linux — 进程(一)基础详解