python cookbook内容提炼
博主打算做一篇python cookbook内容提炼的文章,这篇博客会很实用。
第一章:数据结构和算法
第一章的内容很实用,博主做了一些内容上的提炼,把一些最重要的知识点写在了下面。
下面内容中,非加黑的内容实在开发中不常用的,其他的都是比较重要的内容,感兴趣,可以掌握一下。
1.1解压序列赋值给多个变量
1.2 解压可迭代对象赋值给多个变量
1.3 保留最后N个元素
1.4 查找最大或最小的N个元素
1.5 实现一个优先级队列
1.6 字典中的键映射多个值
1.7 字典排序
1.8 字典的运算
1.9 查找两字典的相同点
1.10 删除序列相同元素并保持顺序
1.12 序列中出现次数最多的元素
1.13 通过某个关键字排序一个字典列表
1.14 排序不支持原生比较的对象
1.15 通过某个字段将记录分组
1.16 过滤序列元素
1.17 从字典中提取子集
1.18 转换并同时计算数据
1.19 合并多个字典或映射
1.1解压序列赋值给多个变量
这是python一种赋值的快捷方式,来看一下示例:
data=['job',12,[12,360]]
a,b,c=data
print('a:',a)
print("b:",b)
print("c:",c)
运行结果:
1.2 解压可迭代对象赋值给多个变量
对于这个知识点,大家看代码自然就懂了,没有很难的地方,感兴趣还可以去看看内部源码。
示例代码:
data=['job',12,[12,360],45,56]
a,*b,c=data
print('a:',a)
print("b:",b)
print("c:",c)
运行结果:
data=['job',12,[12,360],45,56]
a,b,*c=data
print('a:',a)
print("b:",b)
print("c:",c)
运行结果:
1.3 保留最后N个元素
保留最后n个元素,其实这个意思是,如果有m个对象符合条件,那么保留最后n个元素,舍去前面m-n个元素。
文中是通过collections库中的deque类实现的,其实就是用到了队列的性质,先进先出。
import numpy as np
from collections import deque
arrays=np.random.randint(0,5,size=10)
result=deque(maxlen=3)
for i in arrays:
if i>2:
result.append(i)
print(arrays)
print(result)
运行结果:
怎么说呢,这其实是一种巧用队列的方法。
1.4 查找最大或最小的N个元素
这可以通过heapq模块,其实也使用了数据结构最大堆和最小堆的性质,本质上就是用最大堆和最小堆去实现的。
heapq模块有两个函数: nlargest() 和 nsmallest() 可以完美解决这个问题。
先看第一段代码:
import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums)) # Prints [42, 37, 23]
print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2]
运行结果:
heapq.nlargest(3, nums),就是说从nums找出最大的三个元素。
但是你肯定会想,这个不好用啊,实际开发中,很多时候用的都是对象集合,二级列表,很少纯数字让你去处理,不用担心,heapq对各种数据类型都考虑到了。
来看下面一个例子:
portfolio = [
{
'name': 'IBM', 'shares': 100, 'price': 91.1},
{
'name': 'AAPL', 'shares': 50, 'price': 543.22},
{
'name': 'FB', 'shares': 200, 'price': 21.09},
{
'name': 'HPQ', 'shares': 35, 'price': 31.75},
{
'name': 'YHOO', 'shares': 45, 'price': 16.35},
{
'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(