在内置函数(dict、list、set、tuple)的基础上,collections模块还提供了几个其他的数据类型:Counter、deque、defaultdict、namedtuple和OrdereDict等
1.namedtuple
作用:用于生成一个可以使用名字访问元素内容的tuple
如果要表示一个点,我们可以这样表示,但是在使用时我们很难看出这个tuple是用来表示一个坐标
p = (1,2)
因此我们调用namedtuple来解决这个问题
表示二维中的一个点:
import collections Point = collections.namedtuple('Point',['x','y']) print(Point) #<class '__main__.Point'> p = Point(1,2) print(p.x) #1 print(p.y) #2 print(p) #Point(x=1, y=2)
表示三维中的一个点:
import collections Point = collections.namedtuple('Point',['x','y','z']) print(Point) #<class '__main__.Point'> p = Point(1,2,3) print(p.x) #1 print(p.y) #2 print(p.z) #3 print(p) #Point(x=1, y=2, z=3)
表示一个圆的属性:
import collections Circle = collections.namedtuple('Circle',['r','d','s','l'])
表示一张扑克牌:
import collections Card = collections.namedtuple('card',['c_class','c_num']) c = Card('方块','4') print(c.c_class) #方块 print(c.c_num) #4 print(c) #card(c_class='方块', c_num='4')
2.deque()
这里先说一个队列quque()
队列的特性:先进先出(FIFO)
import queue i = 1 q = queue.Queue() q.put(5) q.put(6) q.put(-5) print(q) #<queue.Queue object at 0x0000000002082EB8> print(q.qsize()) #3 整个队列长度为3 print(q.get()) #5 print(q.get()) #6 print(q.get()) #-5 print(q.get()) #阻塞 因为整个队列只有3个元素,当3个元素全部取出后就再也取不出新的元素,程序就会一直等待用户给它一个值
deque()双端队列,两边的头都可以取和存
from collections import deque dq = deque([5,6]) dq.append('a') #从后面放数据 dq.appendleft('b') #从前面放数据 dq.insert(1,'c') #在1这个索引下加入'c',原位置下的元素往后移一位 print(dq) #deque(['b', 'c', 5, 6, 'a']) print(dq.pop()) #a 向后弹出一个元素'a' print(dq.popleft()) #b 向前弹出一个元素'b'
运用队列的好处在于能够高效插入和删除操作的双向列表,适合用于队列和栈
而我们使用list,虽然访问元素速度很快但是我们要插入或删除一个元素就会慢很多,数据量大的时候后,插入和删除效率也会很低
3.OrderedDoct
有序字典