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读书笔记(四)相关推荐

  1. 《关键对话——注意观察,如何判断对话氛围是否安全》读书笔记(四)

    <关键对话--注意观察,如何判断对话氛围是否安全>读书笔记(四) 在对话过程中,既要关注对话内容(即讨论的主题),也要观察对话气氛(即参与者的反应).越早意识到你和对方退出了对话机制,就越 ...

  2. 【SQL.Cookbook读书笔记】——1检索记录

    SQL.Cookbook读书笔记 前言 1检索记录 1.1从表中检索所有行和列 1.2从表中检索部分行(where) 1.3查找满足多个条件的行(where.and.or) 1.4从表中检索部分列 1 ...

  3. 《编程之美》读书笔记(四): 卖书折扣问题的贪心解法

    <编程之美>读书笔记(四):卖书折扣问题的贪心解法 每次看完<编程之美>中的问题,想要亲自演算一下或深入思考的时候,都觉得时间过得很快,动辄一两个小时,如果再把代码敲一遍的话, ...

  4. 3d游戏设计读书笔记四

    3d游戏设计读书笔记四 一.基本操作演练[建议做] 下载 Fantasy Skybox FREE, 构建自己的游戏场景 a. 在AssetStore中搜索Fantasy Skybox FREE并下载. ...

  5. 《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

    来源:http://www.cnblogs.com/edisonchou/p/3809839.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  6. 《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

    前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术:              <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源              &l ...

  7. 《李元芳履职记》读书笔记四 (完结)

    决策不能拍脑袋 管理者不仅仅依靠"拍脑袋"进行决策,而是要用科学的方法加以指导: (决策流程) 工作分派就该这样做 管理者在分派下属工作时,不能"随性",而应该 ...

  8. MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)

    1. Set  - 元组的集合,在 Set 中的元组用逗号分开,Set 以花括号括起来,例如: {([Product].[Category].[Accessories]),([Product].[Ca ...

  9. 读书笔记四 高级光照PBR

    微表面模型参考资料:https://blog.uwa4d.com/archives/Study_PBR.html 更精确的微表面模型GGX参考资料:https://blog.uwa4d.com/arc ...

  10. Flex CookBook 读书笔记 第一部分

    定义数组和对象 可以通过ActionScript或者在Mxml中定义 <mx:Array> <mx:String>flex</mx:String> <mx:S ...

最新文章

  1. sqlserver定时差异备份_一分钟看懂完全备份、差异备份以及增量备份
  2. axure rp pro 6.5
  3. 08--MySQL自学教程:DQL(数据库查询)字段控制查询、聚合函数、分组查询、limit(二)
  4. 【可视化】seaborn常用的10种数据分析图表
  5. 揭秘更加开放的数据库服务:阿里云数据库专属集群
  6. latex表格中的字上下垂直居中
  7. linux下xargs命令用法详解
  8. MATLAB课程表分配问题,求助matlab大神,学校的课程安排太骚了,我们压根就不用学matlab...
  9. Linux apache编译安装
  10. 1小时学会JQuery
  11. 拍摄人像最难的是哪个方面?
  12. python tricks —— datetime 删除日期中的前导 0
  13. 最新仿企业发卡源码,自动发卡平台
  14. linux连接苹果鼠标,Linux 5.13添加对苹果Magic Mouse 2和微软SAM的支持
  15. 串口和TCP调试助手
  16. 13-[LVI-SAM]visual_odometry_初探
  17. torch.optim.Optimizer
  18. 【学习笔记】山东大学生物信息学-08 编程基础与网页制作
  19. CAD2007学习笔记
  20. 编程序将“china”译成密码

热门文章

  1. mongodb数据库的安装 for windows版本 0916
  2. py程序员写代码的习惯养成 防止想到什么写什么
  3. mysql-数据库的设计三范示与ER模型
  4. django-学生列表的删除操作
  5. 通过appium-desktop定位元素
  6. 11GR DATAGRUAD环境BROKER配置Fast-Start Failover
  7. 【SPOJ】2319 BIGSEQ - Sequence
  8. 2015陕西 并查集
  9. MFC调用Qt生成的dll
  10. 使用 javascript 标记高亮关键词