python cookbook内容提炼-第一章数据结构和算法

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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值