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. ... 
随机推荐
- Go_ioutil包
			1. ioutil包的方法 // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情 // 并且始终成功返回. var Discard io.Writer = ... 
- 阻塞式I/0 和 非阻塞式I/O 同步异步详细介绍
			请求描述: `阻塞/非阻塞` 和 `同步/异步` 不是一个概念.举几个简单的例子. 当进程调用一个进行IO操作的API时(比如read函数),在数据没有到达前,read 会挂起,进程会卡住.在数据读取 ... 
- 精简版logging
			# coding=utf-8 import logging import time import os import logging.handlers import re def logger(sch ... 
- Windows设置Tomcat的管理员的用户和密码
			我们首先打开Tomcat的配置文件,具体如下:(conf目录下的tomcat-users.xml) 删除原有的<tomcat-users>,加入如下代码 <tomcat-users& ... 
- 猴博士4小时讲完C语言视频教程
			猴博士4小时讲完C语言视频教程,一共有9节课. 目录结构如下: 目录:/2020030-猴博士4小时讲完C语言 [1G] ┣━━1.C语言基本语句(上)(更多资源访问:www.jimeng365.cn ... 
- 初始css一
			初始CSS 一.form表单补充 form表单关键性的属性补充 form表单 关键性的属性 action 控制的是数据的提交路径 1.不写 默认是朝着当前页面所在的地址提交 2.全路径 3.后缀(/i ... 
- 【C语言】字符数组,碎碎念
			存储方法: (1)字符数组赋值 ①初始化 ]={"China'} 或 ]="China' 注意:字符串可以不加{},单字符必须加 ]={,,} ②键盘输入 () char a; ... 
- 四级技能修炼NPC脚本参考
			[@main] #act CloseBigDialogBox #say \ \ <本服推出部分四级技能.升级四级技能很简单./SCOLOR=250>\ \ <只需要1个/SCOLOR ... 
- Centos610安装Nexus
			1.下载Nexus 地址: https://pan.baidu.com/s/1D5AI6zmuRBSMK0k7j41VuQ 提取码: q50j 选择02-nexus 2.新建nexus账号 u ... 
- C:编译过程、目标代码文件、 可执行文件和库
			C编程的基本策略是, 用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码). 典型的C实现通过编译和链接两个步骤来完成这一过程. 编译器把源代码转换成中间代码, 链接器把中间代码和其 ... 
