堆栈 : 先进后出
队列 :先进先出 FIFO
namedtuple
点生成器。
from collections import namedtuple
#生成点坐标的模块(可命名元祖)
point=namedtuple('point',['x','y'])
#生成点的生成器,‘point’为名字,可按照自己的需要命名
t=point(1,2)
print(t.x)#这里生成的t为点坐标,所以分x,y轴来查看
print(t.y)
print(t)
#输出:
1
2
point(x=1, y=2)
#利用namedtuple创建扑克牌:花色和数字
card=namedtuple('card',['color','num'])
car1=card('红桃',4)
print(car1)
#输出:
card(color='红桃', num=4)
queue
队列:先进先出
import queue
q=queue.Queue()#创建一个队列,不是一个迭代器
q.put(10)#put:往队列里加入元素
q.put(3)
q.put(5)
print(q.get())#取值,是按顺序取的
#print(q.get())
#print(q.get())
print(q.qsize())#查看剩下多少个元素,前面用了一个get,就减少了一个元素
#输出:
10
2
deque
双端队列deque
用队列的好处:列表list储存数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性储存的,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除的双向列表,适合于队列和栈
from collections import deque
d=deque([1,2])#创建一个队列
d.append('a')#从后面放数据
d.appendleft('b')#从前面放数据
d.insert(1,3)#插入元素,(1,3)1为索引,3为要插进去的值
print(d.pop())#从后面取数据
#d.popleft()#从前面取数据
#输出:
a
orderDict
有序字典:相对dict会更占内存
from collections import OrderedDict
dct=OrderedDict([('a',1),('c',3),('b',2)])#生成的字典key顺序不会变
print(dct)
#输出:
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
defaultdict
默认字典
from collections import defaultdict
values=[34,54,65,22,33,77,85]
dct1=defaultdict(list)#这里设置的默认字典values为列表的形式
for v in values:
if v>66:
dct1['k1'].append(v)
else:
dct1['k2'].append(v)
print(dct1)
#输出:
defaultdict(, {'k2': [34, 54, 65, 22, 33], 'k1': [77, 85]})
计数Counter
只给字符串计数
from collections import Counter
c= Counter('addaeaaa')
print(c)
#输出:
Counter({'a': 5, 'd': 2, 'e': 1})