python全栈闯关--19-python常用模块collections(命名空间、队列、双端队列、有序字典、defaultdict)

1、namedtuple

定义一个namedtuple:

namedtuple('数据类型名', [属性列表])

from collections import namedtuple

Point = namedtuple('point', ['x', 'y', 'z'])
p1 = Point(1, 2, 3)
p2 = Point(3, 2, 1)
print(p1.x)
print(p1.y)
print(p1.z)

print(p1)
print(p2)

card = namedtuple('card', ['suits', 'number'])
c1 = card('黑桃', 2)
print(c1)
print(c1.number)
print((c1.suits))

 

2、队列

2.1 队列

import queue
q = queue.Queue()  # 可以指定队列最大长度
for x in range(30):
    q.put(x)

print(q.get()) #当没有值得时候,阻塞等待
print(q.qsize())
print(q.get()) #当没有值得时候,阻塞等待
print(q.qsize())
print(q.get()) #当没有值得时候,阻塞等待
print(q.qsize())
print(q.get()) #当没有值得时候,阻塞等待
print(q.qsize())

队列调用Queue时,可以指定最大长度,超过最大长度,不报错,但是队列也使用不了

q.get()获取值,获取队列中的值,无值时阻塞等待

q.put()向队列中推送值

q.qsize()获取队列的长度

 

2.2 双端队列

from collections import deque

q = deque([1,2])
print(q)
q.append('a')
q.append('b')
print(q)
q.insert(3,'c')
print(q)
print(q.pop())
print(q)
print(q.popleft())
print(q)

q.append('a')最末尾追加元素

q.insert(3,'c') 在索引3的位置插入c,索引从0开始

q.pop 删除对尾撒上的值,并返回

q.popoleft 删除对头的值,并返回

 

3、有序字典

from collections import OrderedDict
import random
od = OrderedDict([('a',1),('b',2),('c',3)])
print(od)

有序字典的键值是固定顺序的

 

4、defaultdict

from collections import defaultdict
# 设置默认值为列表[]
d = defaultdict(list)
print(d['k'])

# 设置默认值为5
d = defaultdict(lambda :5)
# 键值不存在返回5
print(d['k'])

 

posted @ 2020-03-31 17:34  熊熊闯深林  阅读(195)  评论(0编辑  收藏  举报