猿问

Python有序集吗?

Python有序集吗?

Python有一个有序字典..订好的一套怎么样?



慕标5832272
浏览 742回答 3
3回答

森林海

有一个有序集(可能)新链接)的配方,这是从Python 2文档..这在Py2.6或更高版本和3.0或更高版本上运行,没有任何修改。该接口与正常集几乎完全相同,只是初始化应该使用列表进行。OrderedSet([1, 2, 3])这是个MutableSet,所以.union与SET不匹配,但因为它包括__or__可以很容易地添加类似的内容:@staticmethoddef union(*sets):     union = OrderedSet()     union.union(*sets)     return uniondef union(self, *sets):     for set in sets:         self |= set

慕工程0101907

有序集在功能上是有序字典的特例。字典的键是独一无二的。因此,如果忽略有序字典中的值(例如,通过赋值)None),则基本上有一个有序集。截至Python3.1的确有collections.OrderedDict..下面是OrderedSet的示例实现。(请注意,只需要定义或重写几个方法:collections.OrderedDict和collections.MutableSet(做重物。)import&nbsp;collectionsclass&nbsp;OrderedSet(collections.OrderedDict,&nbsp;collections.MutableSet): &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;update(self,&nbsp;*args,&nbsp;**kwargs): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;kwargs: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise&nbsp;TypeError("update()&nbsp;takes&nbsp;no&nbsp;keyword&nbsp;arguments") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;s&nbsp;in&nbsp;args: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;e&nbsp;in&nbsp;s: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.add(e) &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;add(self,&nbsp;elem): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self[elem]&nbsp;=&nbsp;None &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;discard(self,&nbsp;elem): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.pop(elem,&nbsp;None) &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__le__(self,&nbsp;other): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;all(e&nbsp;in&nbsp;other&nbsp;for&nbsp;e&nbsp;in&nbsp;self) &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__lt__(self,&nbsp;other): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self&nbsp;<=&nbsp;other&nbsp;and&nbsp;self&nbsp;!=&nbsp;other&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__ge__(self,&nbsp;other): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;all(e&nbsp;in&nbsp;self&nbsp;for&nbsp;e&nbsp;in&nbsp;other) &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__gt__(self,&nbsp;other): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self&nbsp;>=&nbsp;other&nbsp;and&nbsp;self&nbsp;!=&nbsp;other&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__repr__(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;'OrderedSet([%s])'&nbsp;%&nbsp;(',&nbsp;'.join(map(repr,&nbsp;self.keys()))) &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__str__(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;'{%s}'&nbsp;%&nbsp;(',&nbsp;'.join(map(repr,&nbsp;self.keys()))) &nbsp;&nbsp;&nbsp;&nbsp;difference&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__sub__) &nbsp;&nbsp;&nbsp;&nbsp;difference_update&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__isub__) &nbsp;&nbsp;&nbsp;&nbsp;intersection&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__and__) &nbsp;&nbsp;&nbsp;&nbsp;intersection_update&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__iand__) &nbsp;&nbsp;&nbsp;&nbsp;issubset&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__le__) &nbsp;&nbsp;&nbsp;&nbsp;issuperset&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__ge__) &nbsp;&nbsp;&nbsp;&nbsp;symmetric_difference&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__xor__) &nbsp;&nbsp;&nbsp;&nbsp;symmetric_difference_update&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__ixor__) &nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;=&nbsp;property(lambda&nbsp;self:&nbsp;self.__or__)
随时随地看视频慕课网APP

相关分类

Python
我要回答