保留有限历史记录collections.deque
deque(maxlen=N)新建一个固定大小的队列,当新的元素加入并队列已满的时候,最老的元素自动被移除.
from collections import deque
d = deque() # 创建一个空的 deque
d为双端队列
双端队列是一种具有队列和栈的性质的数据结构:
元素可以从两端弹出,其限定插入和删除操作在表的两端进行。
deque 支持从两端快速添加和删除元素,时间复杂度为 O(1)。
添加元素
d.append(x) 从右端添加一个元素
d.appendleft(x) 从左端添加一个元素
删除元素
d.pop() 从右端删除并返回一个元素
d.popleft() 从左端删除并返回一个元素
查看元素( Python 3.7+ 中新增)
d.peek() 查看并返回右端的元素,但不删除它
d.peekleft() 查看并返回左边的元素,但不删除它
d=deque(maxlen=3)
maxlen:在创建deque是设置最大长度,当deque达到这个长度时,新添加的元素会导致从另一端删除一个元素
from collections import deque
q = deque(maxlen=3)
q.append(1)
q.append([1, 2, 4])
q.append(1)
print(q)
'>>> deque([1, [1, 2, 4], 1], maxlen=3)'
q.append(2)
q.append(5)
q.append(6)
print(q)
'>>> deque([2, 5, 6], maxlen=3)'
q.appendleft(9)
print(q)
'>>> deque([9, 2, 5], maxlen=3)'
print(q.pop())
'>>> 5'
print(q.popleft())
'>>> 9'
print(q)
'>>> deque([2], maxlen=3)'
查找序列中出现次数最多的元素
collections.Counter 适合所有需要制表或计数数据的场合
from collections import Counter
list1 = [1,2,3,4,5,6,7,4,5,6,3,4,5,6,5,6,7,6,8]
counts = Counter(list1)
#出现频率最高的三个
numbers = counts.most_common(3)
print(numbers)
# [(6, 5), (5, 4), (4, 3)]
#元素出现次数
print(counts[6])
#5