2022年 11月 9日

python 集合是有序的吗_Python是否有序集?

小编典典

从功能上说,有序集是有序字典的特例。

字典的键是唯一的。因此,如果人们不理会有序字典中的值(例如,通过分配它们None),那么实质上就是一个有序集合。

对于Python 3.1的存在collections.OrderedDict。以下是OrderedSet的示例实现。(请注意,只有很少的方法需要定义或重写:collections.OrderedDict和collections.MutableSet。做繁重)

import collections

class OrderedSet(collections.OrderedDict, collections.MutableSet):

def update(self, *args, **kwargs):

if kwargs:

raise TypeError(“update() takes no keyword arguments”)

for s in args:

for e in s:

self.add(e)

def add(self, elem):

self[elem] = None

def discard(self, elem):

self.pop(elem, None)

def __le__(self, other):

return all(e in other for e in self)

def __lt__(self, other):

return self <= other and self != other

def __ge__(self, other):

return all(e in self for e in other)

def __gt__(self, other):

return self >= other and self != other

def __repr__(self):

return ‘OrderedSet([%s])’ % (‘, ‘.join(map(repr, self.keys())))

def __str__(self):

return ‘{%s}’ % (‘, ‘.join(map(repr, self.keys())))

difference = property(lambda self: self.__sub__)

difference_update = property(lambda self: self.__isub__)

intersection = property(lambda self: self.__and__)

intersection_update = property(lambda self: self.__iand__)

issubset = property(lambda self: self.__le__)

issuperset = property(lambda self: self.__ge__)

symmetric_difference = property(lambda self: self.__xor__)

symmetric_difference_update = property(lambda self: self.__ixor__)

union = property(lambda self: self.__or__)

2020-02-10