hello


In [23]:
class R:
    
    
    def __init__(self, size=3):
        self.__N=size
        self.__h={}
        self.__q=[]

        
        
    def __remove(self,k):
        if k in self.__h:
            del self.__h[k]
            self.__q.remove(k)
            
 
    def __make_recent(self,k):
        if k in self.__q: 
            self.__q.remove(k)
        self.__q.append(k)

        
    def __append(self,k,v):
        self.__h[k]=v
        self.__q.append(k)

        
    def __remove_oldest(self):
        if len(self.__q) >0:
            k = self.__q.pop(0)
            del self.__h[k]
        
        
    def put(self,k,v):
        self.__remove(k)
        
        if len(self.__h) >= self.__N :
            self.__remove_oldest()
            
        self.__append(k, v)
        
        
    def get(self, k):
        self.__make_recent(k)
        return self.__h[k]
    
    @property
    def q(self):
        return self.__q
        
        
        
r = R(3)
r.put('a','aa')
r.put('b','bb')
r.put('c','cc')
r.put('d','dd')
print(r.q)
r.get('c')
print(r.q)

assert r.q == ['b', 'd', 'c']

    
# %save 'wu2.py'


['b', 'c', 'd']
['b', 'd', 'c']