欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python cookbook 第一章 数据结构和算法(1.1-1.4)

程序员文章站 2022-05-28 13:26:40
...

1.1-1.2 解压序列赋值给多个变量

简单赋值语句赋值给变量即可,一切可迭代对象都可以,例如生成器。左边符号个数需要和右边元素个数相等,如果要删除不需要的变量,赋值无意义变量命即可。

个数不匹配会产生异常

a,b,c,d,e= (1,2,[3,4],'nihao',(5,6))
a = 1
b = 2
c = [3,4]   #z,y = c ,z=3,y=4
d = 'nihao'
e = (5,6)

为了解决上边的问题,使用''*''来解决。使用*号加变量名代表任意数量个数的变量,并且赋值了一个数组。

a = (1,2,3,4,5,6)
x,*y,z = a
x= 1
z = 6
y = 2,3,4,5     #特殊例子:s = (1,2,(3,4)) a,*b,(*_,c)=s,a=1,b=2,c=4

1.3保存最后N个元素(内建模块collections 的deque函数)

使用队列来解决问题。

使用deque生成队列,并且自带appendleft,popleft函数,在队列两端插入数据复杂对0(1),在list两端复杂度为0(n)。

from collections import deque
q = deque([1,2,3])
q.appendleft(4)
q
deque[4,1,2,3]  #deque(maxlen)超出Maxlen时,旧元素会被新元素给移除掉。
q = deque([1,2,3,4,5],maxlen=5)
q
deque(1,2,3,4,5)
q.append(1)
q
deque(2,3,4,5,1)

1.4 查找最大最小的N个元素

查找几个数,如果单个情况下,使用max,min函数即可,另外,设计概念:堆数据概念,即堆数据的第一个数据永远是最小值。

使用了heapq模块的两个函数,nlargest() 和 nsmallest() 

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(3, portfolio, key=lambda s: s['price'])

cheap
cheap
[{'name': 'YHOO', 'shares': 45, 'price': 16.35},
 {'name': 'FB', 'shares': 200, 'price': 21.09},
 {'name': 'HPQ', 'shares': 35, 'price': 31.75}]

 

相关标签: python cookbook