collections模块中的deque对象是一个队列,它有着正常队列的先进先出原则。我们可以利用这个对象来实现数据的保存功能。

例如,现有一个猜数字大小的游戏,系统开始会随机roll点一个0~100的整数,然后键盘开始接收你的输入,每次输入的数字系统会告诉你比这个随机数大还是小,直到你猜对了程序才会结束。如下图这样:

代码见:

from collections import deque
from random import randint N = randint(0, 100)
history = deque([], 5) def guess(k):
if k == N:
print "right"
return True
if k < N:
print "%s is less-than N" % k
if k > N:
print "%s is greater-than N" % k
return False while True:
line = raw_input("please input a number:")
if line.isdigit():
k = int(line)
history.append(k)
if guess(k):
break
elif line == "history" or line == "h?":
print list(history)

在这里我们使用了这个deque对象,它记录下了我们上次的输入历史,便于我们记忆从而避免重复猜测。

deque([], 5)

deque这里接受两个参数,第一个为队列的初值,第二个指定存储空间。这里指定长度为5,超出5个长度后,第一个数出去,最新的数进入。

>>> d = deque([], 5)
>>> d.append(1)
>>> d.append(2)
>>> d.append(3)
>>> d.append(4)
>>> d.append(5)
>>> d
deque([1, 2, 3, 4, 5], maxlen=5)
>>> d.append(6)
>>> d
deque([2, 3, 4, 5, 6], maxlen=5)

保存对象

对于上面的队列d,我们希望保存下来,下次程序重启还可以使用,可以使用pickle模块。

保存

>>> import pickle
>>> s = [1, 2, 3, 4, 5]
>>> pickle.dump(s, open('object', 'w'))
>>> # 这样就将s对象存在了object这个文件中,并且这个文件有一个写权限

导入

>>> import pickle
>>> s = pickle.load('object')
>>> s
[1, 2, 3, 4, 5]

Python强化训练笔记(七)——使用deque队列以及将对象保存为文件的更多相关文章

  1. Python强化训练笔记(六)——让字典保持有序性

    python的字典是一个非常方便的数据结构,使用它我们可以轻易的根据姓名(键)来找到他的成绩,排名等(值),而不用去遍历整个数据集. 例如:{'Lee': [1, 100], 'Jane': [2, ...

  2. Python强化训练笔记(五)——找出多个字典中的公共键

    在这个问题中,我们期望得到的结果是找到这三轮比赛中,每轮都进球的球员都有谁.下面用python来模拟一下,先生成一批数据: >>> from random import randin ...

  3. Python强化训练笔记(四)——字典的排序

    假如有学生成绩以字典顺序排列:{'Tom': 87, 'Jack': 90, 'Rose': 100.....} 想要根据学生的成绩来进行排序,可以考虑使用sorted函数.但是sorted函数用在字 ...

  4. Python强化训练笔记(三)——词频的统计

    现有列表如下: [6, 7, 5, 9, 4, 1, 8, 6, 2, 9] 希望统计各个元素出现的次数,可以看作一个词频统计的问题. 我们希望最终得到一个这样的结果:{6:2, 7:1...}即 { ...

  5. Python强化训练笔记(二)——元组元素的命名

    对于一个元组如: >>> s1 = ('Jim', 21, 'boy', '5788236@qq.com') 我们要得到该对象的名字,年龄,性别及邮箱的方法为s1[0],s1[1], ...

  6. Python强化训练笔记(一)——在列表,字典,集合中筛选数据

    列表,字典,集合中根据条件筛选数据,如下所示 列表:[-10,2,2,3,-2,7,6,9] 找出所有的非负数 字典:{1:90,2:55,3:87...} 找出所有值大于60的键值对 集合:{2,3 ...

  7. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. 【Python】学习笔记七:函数

    函数的目的:重复使用相同的一段程序 函数的定义 下面是我自定义的一个求a,b,c三个参数平方和的函数 #a,b,c三个参数的平方和 def pow_sum(a,b,c): x = pow(a,2)+p ...

  9. 『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用

    一.collections.deque队列 deque(maxlen=N)构造函数会新建一个固定大小的队列.当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉. 如果你不设置最大队列大小, ...

随机推荐

  1. Eclipse 代码显示不全的问题

    Eclipse中的"Show Source of Selected Element Only"功能引起的, 定位到: Window->Customize Perspectiv ...

  2. plist中的中文数据

    直接打印那个值就会显示中文了,你打引整个 plist 文件的内容,则会显示出 NSUTF8 编码后的数据:请放心使用:

  3. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  4. SVN 删除误上传到服务器的文件

    使用Axure软件的时候,不小心把一些无用的文档也提交到了SVN上了. 当更新服务器上的文件到本地,然后删除误提交的文件时,出现了一个错误,见下图:   错误:cannot verify lock o ...

  5. Apache curator-client详解

    Apache curator框架中curator-client组件可以作为zookeeper client来使用,它提供了zk实例创建/重连机制等,简单便捷.不过直接使用curator-client并 ...

  6. Unity3D NGUI刮刮卡效果

    线上效果 确保你的纹理的read/write 是勾选的,纹理格式是 RGBA32的 //代码 using UnityEngine; [RequireComponent(typeof(UITexture ...

  7. Gym - 100917H

    题目链接 #include<cstdio> #include<cstring> #include<algorithm> #include<vector> ...

  8. mac tomcat https

    一.HTTPS的基本工作原理: HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息.TLS/SSL协议不仅仅是一套加密传输的协议 ...

  9. Redis初探

    Redis如今已经成为Web开发社区中最火热的内存数据库之一,而他的诞生距离现在不过才6年的时间,随着Web2.0的蓬勃发展,网站数据快速增长,对高性能读写的需求也越来越多,再加上半结构化的数据比重逐 ...

  10. STM32F407Discovery开发板使用环境搭建

    差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...