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. ...
 
随机推荐
- AcWing 872. 最大公约数
			
#include <iostream> #include <algorithm> using namespace std; //辗转相除法 //a和b的最大公约数 = b和(a ...
 - AcWing 870. 约数个数
			
#include <iostream> #include <algorithm> #include <unordered_map> #include <vec ...
 - bootstrap的网格控制
			
<div class="container-fluid row m-0 p-0"> <div class="col-2 border"> ...
 - Dictionary-Guided Editing Networks for Paraphrase Generation解读
			
过程:输入->检索->编码->解码 解释:检索:输入一句话x,首先从PPDB中检索出M * 10 个释义对,并排序,记为x的本地字典: 编码:将所有的释义对编码为向量,单字转为字向量 ...
 - mybatis--多对多关联
			
mybatis3.0 添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作.因此在进行实体类多对多映射表 ...
 - 【使用python urllib时出现[SSL: CERTIFICATE_VERIFY_FAILED]报错的解决方案】
			
"首先,这个报错是告诉你,你的证书有问题. 其次,出现这个问题的原因,在于Python本身. 问题原因 Python升级到2.7.9以后,引入了一个新特性. 当使用urllib打开https ...
 - python函数编程闯关总结
			
文件处理相关 1,编码问题 (1)请问python2与python3中的默认编码是什么? python .x默认的字符编码是ASCII,默认的文件编码也是ASCII python .x默认的字符编码是 ...
 - 解决vim选中文字不能复制的问题
			
转载自本人独立博客:https://liushiming.cn/2020/01/18/vim-copy-issue-in-iterm2/ 概述 最近发现在iterm2中打开vim,用鼠标选中文字,并用 ...
 - C语言随笔2: rom ram 及其运行的过程
			
内存的分配方式 五个区 :堆区.栈区.全局区.文字常量区.程序代码区 这五个区是ram中的.或者说,堆栈段.数据段.代码段 而rom中,没有堆区和栈区,只有数据段和代码段. ram是在程序运行是的内存 ...
 - 数据表设计:多对多关系E-R图转换——中间表
			
链接:https://blog.csdn.net/vainfanfan/article/details/80568784 链接2:https://www.cnblogs.com/hiwangzi/p/ ...