Python实现一个LRU
class Node:
key = None
value = None
pre = None
next = None
def __init__(self, key, value):
self.key = key
self.value = value
class LRUCache:
capacity = 0
mapping = {}
head = None
end = None
def __init__(self, capacity):
self.capacity = capacity
def set(self, key, value):
if key in self.mapping:
oldNode = self.mapping[key]
oldNode.value = value
self.remove(oldNode)
self.set_head(oldNode)
else:
node = Node(key, value)
if len(self.mapping) >= self.capacity:
self.mapping.pop(self.end.key)
self.remove(self.end)
self.set_head(node)
else:
self.set_head(node)
self.mapping[key] = node
def set_head(self, n):
n.next = self.head
n.pre = None
if self.head:
self.head.pre = n
self.head = n
if not self.end:
self.end = self.head
def remove(self, n):
if n.pre:
n.pre.next = n.next
else:
self.head = n.next
if n.next:
n.next.pre = n.pre
else:
self.end = n.pre
def get_all_keys(self):
tmp_node = None
if self.head:
tmp_node = self.head
temp = "<{0},{1}>"
result = ""
while tmp_node:
tmp = temp.format(tmp_node.key, tmp_node.value)
result += tmp
result += " -> "
tmp_node = tmp_node.next
tmp = temp.format(None, None)
result += tmp
print(result)
def get(self, key):
if key in self.mapping:
node = self.mapping[key]
self.remove(node)
self.set_head(node)
return node.value
else:
return -1
if __name__ == '__main__':
cache = LRUCache(100)
cache.set('a', '1')
cache.set('b', '2')
cache.set('c', 3)
cache.set('d', 4)
cache.get_all_keys()
cache.set('a', 5)
cache.get_all_keys()
cache.get('c')
cache.get_all_keys()
Python实现一个LRU的更多相关文章
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- python 获取一个列表有多少连续列表
python 获取一个列表有多少连续列表 例如 有列表 [1,2,3] 那么连续列表就是 [1,2],[2,3],[1,2,3] 程序实现如下: 运行结果:
- python是一个解释器
python是一个解释器 利用pip安装python插件的时候,观察到python的运作方式是逐步解释执行的 适合作为高级调度语言: 异常的处理以及效率应该是主要的问题
- 使用python检测一个设备是否ping的通
使用python检测一个设备是否ping的通 一,subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并 ...
- python 登陆一个网站
今天想用python写一个登陆的脚本,搜了一下,网上挺多的,看了一些后写了个登陆虎扑论坛的脚本. 原理: 只要在发送http请求时,带上含有正常登陆的cookie就可以了. 1.首先我们要先了解coo ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
- Pyscripter是python下一个非常流行的开源IDE
Pyscripter 不能正确调用另一文件中模块的问题的解析(Internal Engine 和 Remote Engine) 背景 Pyscripter是python下一个非常流行的开源IDE,笔者 ...
- python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题
今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...
- python遍历一个目录,输出所有文件名
python遍历一个目录,输出所有文件名 python os模块 os import os def GetFileList(dir, fileList): newDir = dir if os. ...
随机推荐
- [杭电_HDU] 2013
#include <iostream> using namespace std; int main() { int n; while (cin >> n) { ; //最终桃子 ...
- java 实体类 时间格式字段注解
@DatetimeFormat是将String转换成Date,一般前台给后台传值时用 @JsonFormat(pattern="yyyy-MM-dd") 将Date转换成Strin ...
- [lua]紫猫lua教程-命令宝典-L1-01-02. 变量
L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...
- Linux系统运维工程师入门绝招放送
运维是干嘛的?安装服务器系统?重装系统再装系统?背锅的? 我就稀里糊涂的,这样报着必死的决心,考下RHCE认证,走上了Linux运维的道路,成为了一名linux运维工程师.有些心得跟大家分享下,避免小 ...
- requests使用小结(不定期更新)
request是python的第三方库,使用上比urllib和urllib2要更方便. 0x01 使用session发送:能保存一条流中获取的cookie,并自动添加到http头中 s = reque ...
- mount命令实际操作样例
本篇文章主要介绍了如何在Linux(CentOS 7)命令行模式安装VMware Tools,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 本例中为在Linux(以CentOS 7为例)安装VM ...
- .net core 删除主表,同时删除子表
前提条件: 代码懒加载, 数据库有外键关联 var entity = context.主表.Include(o => o.子表).FirstOrDefault(p => p.Id == i ...
- Spring一些注解
spring @component的作用详细介绍 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@ ...
- python中字符串的四种表达方式
今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...
- static关键字 weak关键字
1.static关键字 static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart){ ...} 在函数前面加了一个stati ...