首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有.index()方法的Python

带有.index()方法的Python
EN

Stack Overflow用户
提问于 2011-11-03 16:48:21
回答 1查看 3.5K关注 0票数 3

有没有人知道python的快速OrderedSet实现:

  • 记得插入顺序
  • 有一个index()方法(与列表提供的方法一样)

我找到的所有实现都缺少.index()方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-03 16:57:48

您可以将其添加到子类中。下面是您在注释中链接的OrderedSet的基本实现:

代码语言:javascript
运行
复制
class IndexOrderedSet(OrderedSet):
    def index(self, elem):
        if key in self.map:
            return next(i for i, e in enumerate(self) if e == elem)
        else:
            raise KeyError("That element isn't in the set")

您提到只需要addindex和顺序迭代。您可以通过使用OrderedDict作为存储来实现这一点。另外,您还可以对collections.Set抽象类进行子类,以获得其他set操作frozenset的支持:

代码语言:javascript
运行
复制
from itertools import count, izip
from collections import OrderedDict, Set

class IndexOrderedSet(Set):
    """An OrderedFrozenSet-like object
       Allows constant time 'index'ing
       But doesn't allow you to remove elements"""
    def __init__(self, iterable = ()):
        self.num = count()
        self.dict = OrderedDict(izip(iterable, self.num))
    def add(self, elem):
        if elem not in self:
            self.dict[elem] = next(self.num)
    def index(self, elem):
        return self.dict[elem]
    def __contains__(self, elem):
        return elem in self.dict
    def __len__(self):
        return len(self.dict)
    def __iter__(self):
        return iter(self.dict)
    def __repr__(self):
        return 'IndexOrderedSet({})'.format(self.dict.keys())

您不能子类collections.MutableSet,因为您不能支持从集合中移除元素并保持索引正确。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7998692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档