为了账号安全,请及时绑定邮箱和手机立即绑定

Python有序集吗?

Python有序集吗?

慕标5832272 2019-06-11 12:59:23
Python有序集吗?Python有一个有序字典..订好的一套怎么样?
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

有一个有序集(可能)新链接)的配方,这是从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


查看完整回答
反对 回复 2019-06-11
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

有序集在功能上是有序字典的特例。

字典的键是独一无二的。因此,如果忽略有序字典中的值(例如,通过赋值)None),则基本上有一个有序集。

截至Python3.1的确有collections.OrderedDict..下面是OrderedSet的示例实现。(请注意,只需要定义或重写几个方法:collections.OrderedDictcollections.MutableSet(做重物。)

import collectionsclass 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__)


查看完整回答
反对 回复 2019-06-11
  • 3 回答
  • 0 关注
  • 741 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信