python3cookbook_python3-cookbook读书笔记(四)
1.16 过滤序列元素
1.使用列表推导式
>>> mylist = [1, 4, -5, 10, -7, 2, 3, -1]
>>> [n for n in mylist if n > 0]
[1, 4, 10, 2, 3]
缺点:当结果集很大的时候,会占用大量内存。也可以使用生成器表达式来迭代产生过滤的元素
>>> pos = (n for n in mylist if n > 0)
>>> pos
at 0x1006a0eb0>
>>> for x in pos:
... print(x)
...
1
4
10
2
3
>>>
过滤规则复杂的情况下,可以使用内建的filter()函数
values = ['1', '2', '-3', '-', '4', 'N/A', '5']
def is_int(val):
try:
x = int(val)
return True
except ValueError:
return False
ivals = list(filter(is_int, values))
print(ivals)
# Outputs ['1', '2', '-3', '4', '5']
此外还介绍了itertools.compress()
原理:先创建一个 Boolean 序列,指示哪些元素符合条件。 然后 compress() 函数根据这个序列去选择输出对应位置为 True 的元素
filler()和itertools.compress()返回的都是迭代器对象,如果需要列表的话,需要使用list()转换
1.17 从字典中提取子集
1.字典推导式
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# Make a dictionary of all prices over 200
p1 = {key: value for key, value in prices.items() if value > 200}
# Make a dictionary of tech stocks
tech_names = {'AAPL', 'IBM', 'HPQ', 'MSFT'}
p2 = {key: value for key, value in prices.items() if key in tech_names}
1.18 映射名称到序列元素
主要是通过collections.namedtuple()来命名元组
>>> from collections import namedtuple
>>> Subscriber = namedtuple('Subscriber', ['addr', 'joined'])
>>> sub = Subscriber('jonesy@example.com', '2012-10-19')
>>> sub
Subscriber(addr='jonesy@example.com', joined='2012-10-19')
>>> sub.addr
'jonesy@example.com'
>>> sub.joined
'2012-10-19'
>>>
使用_repalce()改变属性的值
命名元组也可以使用字典来实现。因为字典存储需要更多的内存空间。 如果你需要构建一个非常大的包含字典的数据结构,那么使用命名元组会更加高效。
1.19 转换并同时计算数据
1.生成器表达式
nums = [1, 2, 3, 4, 5]
s = sum(x * x for x in nums)
1.20 合并多个字典或映射
使用 collections 模块中的 ChainMap 类
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
from collections import ChainMap
c = ChainMap(a,b)
print(c['x']) # Outputs 1 (from a)
print(c['y']) # Outputs 2 (from b)
print(c['z']) # Outputs 3 (from a)
一个 ChainMap 接受多个字典并将它们在逻辑上变为一个字典。 然后,这些字典并不是真的合并在一起了, ChainMap 类只是在内部创建了一个容纳这些字典的列表 并重新定义了一些常见的字典操作来遍历这个列表
作为 ChainMap 的替代,你可能会考虑使用 update() 方法将两个字典合并,但是它需要你创建一个完全不同的字典对象(或者是破坏现有字典结构)。 同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。
ChainMap 使用原来的字典,它自己不创建新的字典。所以它并不会产生上面所说的结果
>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, 'z': 4 }
>>> merged = ChainMap(a, b)
>>> merged['x']
1
>>> a['x'] = 42
>>> merged['x'] # Notice change to merged dicts
42
>>>
至此,python-cookbook的第一章节 数据结构与算法就结束了,总体发现,该书更多侧重介绍python中的函数来实现一些算法。对与其算法的原理并没有侧重介绍。因此更适合老手,对新手来讲,掌握算法的原理还是比较重要的。
python3cookbook_python3-cookbook读书笔记(四)相关推荐
- 《关键对话——注意观察,如何判断对话氛围是否安全》读书笔记(四)
<关键对话--注意观察,如何判断对话氛围是否安全>读书笔记(四) 在对话过程中,既要关注对话内容(即讨论的主题),也要观察对话气氛(即参与者的反应).越早意识到你和对方退出了对话机制,就越 ...
- 【SQL.Cookbook读书笔记】——1检索记录
SQL.Cookbook读书笔记 前言 1检索记录 1.1从表中检索所有行和列 1.2从表中检索部分行(where) 1.3查找满足多个条件的行(where.and.or) 1.4从表中检索部分列 1 ...
- 《编程之美》读书笔记(四): 卖书折扣问题的贪心解法
<编程之美>读书笔记(四):卖书折扣问题的贪心解法 每次看完<编程之美>中的问题,想要亲自演算一下或深入思考的时候,都觉得时间过得很快,动辄一两个小时,如果再把代码敲一遍的话, ...
- 3d游戏设计读书笔记四
3d游戏设计读书笔记四 一.基本操作演练[建议做] 下载 Fantasy Skybox FREE, 构建自己的游戏场景 a. 在AssetStore中搜索Fantasy Skybox FREE并下载. ...
- 《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构
来源:http://www.cnblogs.com/edisonchou/p/3809839.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- 《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件
前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 &l ...
- 《李元芳履职记》读书笔记四 (完结)
决策不能拍脑袋 管理者不仅仅依靠"拍脑袋"进行决策,而是要用科学的方法加以指导: (决策流程) 工作分派就该这样做 管理者在分派下属工作时,不能"随性",而应该 ...
- MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
1. Set - 元组的集合,在 Set 中的元组用逗号分开,Set 以花括号括起来,例如: {([Product].[Category].[Accessories]),([Product].[Ca ...
- 读书笔记四 高级光照PBR
微表面模型参考资料:https://blog.uwa4d.com/archives/Study_PBR.html 更精确的微表面模型GGX参考资料:https://blog.uwa4d.com/arc ...
- Flex CookBook 读书笔记 第一部分
定义数组和对象 可以通过ActionScript或者在Mxml中定义 <mx:Array> <mx:String>flex</mx:String> <mx:S ...
最新文章
- sqlserver定时差异备份_一分钟看懂完全备份、差异备份以及增量备份
- axure rp pro 6.5
- 08--MySQL自学教程:DQL(数据库查询)字段控制查询、聚合函数、分组查询、limit(二)
- 【可视化】seaborn常用的10种数据分析图表
- 揭秘更加开放的数据库服务:阿里云数据库专属集群
- latex表格中的字上下垂直居中
- linux下xargs命令用法详解
- MATLAB课程表分配问题,求助matlab大神,学校的课程安排太骚了,我们压根就不用学matlab...
- Linux apache编译安装
- 1小时学会JQuery
- 拍摄人像最难的是哪个方面?
- python tricks —— datetime 删除日期中的前导 0
- 最新仿企业发卡源码,自动发卡平台
- linux连接苹果鼠标,Linux 5.13添加对苹果Magic Mouse 2和微软SAM的支持
- 串口和TCP调试助手
- 13-[LVI-SAM]visual_odometry_初探
- torch.optim.Optimizer
- 【学习笔记】山东大学生物信息学-08 编程基础与网页制作
- CAD2007学习笔记
- 编程序将“china”译成密码