`
wwweducn
  • 浏览: 29745 次
文章分类
社区版块
存档分类
最新评论

尾部、方法-Python和数据结构学习 -by小雨

阅读更多

今天朋友几篇文章介绍了改尾部、方法-的文章. 关联文章的地址

    额,睡不着

    第二章的尾部还有个关于写翻转棋的,临时先不写.

    面下就是直接上Set和Map了,这里应用的是最简略的方法.也就是外部应用的list

    先上Set

    不过看上去杂复都很高的.

class Set:
    def __init__(self):
        self._theElements = list()
        
    def __len__(self):
        return len(self._theElements)
    
    def __contains__(self,element):
        return element in self._theElements
        
    def add(self,element):
        if element not in self:
            self._theElements.append(element)
            
    def remove(self,element):
        assert element in self,"The element must be in the set"
        self._theElements.remove(item)
        
    def __eq__(self,setB):
        if len(self) != len(setB):
            return False
        else:
            return self.isSubsetOf(setB)
        
    def isSubsetOf(self,setB):
        for element in self:
            if element not in setB:
                return False
        return True
    
    def union(self,setB):
        newSet = Set()
        newSet._theElements.extend(self._theElements)
        for element in setB:
            if element not in self:
                newSet._theElements.append(element)
        return newSet
        
    def interset(self,setB):
        newSet = Set()
        for element in setB:
            if element in self:
                newSet._theElements.append(element)
        return newSet
        
    def difference(self,setB):
        newSet = Set()
        for element in self:
            if element not in setB:
                newSet._theElements.append(element)
        
        return newSet
        
    def __iter__(self):
        return iter(self._theElements)

插入$O(n)$,求并,交.差,等相$O(n^2)$,当然面后有通过排序来行进优化的.

 

    面下就是Map了,不过其中额定应用了一个简略的存保key,value. 这个类似于stl中的 std::pair.

    码代如下:

class Map:
    def __init__(self):
        self._entryList = list()
    
    def __len__(self):
        return len(self._entryList)
    
    def __contains__(self,key):
        ndx = self._findPosition(key)
        return ndx is not None
    
    def add(self,key,value):
        ndx = self._findPosition(key)
        if ndx is not None:
            self._entryList[ndx].value = value
            return False
        else:
            entry = _MapEntry(key,value)
            self._entryList.append(entry)
            return True
    
    def valueOf(self,key):
        ndx = self._findPosition(key)
        assert ndx is not None,"Invalid map key"
        return self._entryList[ndx].value
        
    def remove(self,key):
        ndx = self._findPosition(key)
        ndx = self._findPosition(key)
        assert ndx is not None,"Invalid map key"
        self._entryList.pop(ndx)
    
    def __iter__(self):
        return _MapIterator(self._entryList)
    
    
    def _findPosition(self,key):
        for i in range(len(self)):
            if self._entryList[i].key == key:
                return i
        return None
    
class _MapEntry:
    def __init__(self,key,value):
        self.key = key
        self.value = value
        
class _MapIterator:
    def __init__(self,mapRef):
        self._curI = 0
        self._mapRef = mapRef
    
    def __iter__(self):
        return self
    
    def next(self):
        if self._curI < len(self._mapRef):
            entry = self._mapRef[self._curI]
            self._curI += 1
            return entry.key,entry.value
        else:
            raise StopIteration

嗯.都是很简略的.

    睡觉拉..

 

文章结束给大家分享下程序员的一些笑话语录: 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。花重金购买了上等的文房四宝。一日突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风 范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics