一种可变集,它能记住它的顺序,因此每个条目都有一个索引。

ordered-set的Python项目详细描述


TravisCodecovPypi

orderedset是一种可变的数据结构,它是列表和集合的混合体。 它记住条目的顺序,每个条目都有一个索引号 可以查到。

用法示例

OrderedSet的创建和使用方式与set类似:

>>> from ordered_set import OrderedSet

>>> letters = OrderedSet('abracadabra')

>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd'])

>>> 'r' in letters
True

在orderedset中查找条目的索引或查找 按索引输入。为了帮助处理这个用例,.add()方法返回 添加项的索引,无论它是否已在集合中。

>>> letters.index('r')
2

>>> letters[2]
'r'

>>> letters.add('r')
2

>>> letters.add('x')
5

orderedsets实现联合(|)、交集(&)和差分(-) 像集合这样的运算符可以。

>>> letters |= OrderedSet('shazam')

>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])

>>> letters & set('aeiou')
OrderedSet(['a'])

>>> letters -= 'abcd'

>>> letters
OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])

__getitem__()index()方法已扩展为接受任何 除了一个字符串,返回一个列表,以执行类似于numpy的“fancy 索引“。

>>> letters = OrderedSet('abracadabra')

>>> letters[[0, 2, 3]]
['a', 'r', 'c']

>>> letters.index(['a', 'r', 'c'])
[0, 2, 3]

orderedset实现__getstate____setstate__以便对其进行pickle, 并实现抽象基类collections.MutableSetcollections.Sequence

与numpy和pandas的互操作性

OrderedSet可以用作稀疏对象之间的双向映射 词汇和密集指数。从3.1版开始,它接受numpy数组 索引号和列表。

这些特性的组合使orderedset成为许多 使用pandas.Index的对象中,有许多操作是 比同类熊猫行动快。

为了进一步与pandas兼容,index,get_loc(pandas方法 查找单个索引)和get_indexer(pandas方法 “反向索引”是^ {CD14}}的别名(处理这两种情况) 在OrderedSet中)。

键入提示

要使用类型提示功能,请从安装ordered-set-stubsPyPI

$ pip install ordered-set-stubs

作者

orderedset由robyn speer实现。乔恩·克莱尔做出了改变 测试以使其适合python集api。

比较

orderedset的最初实现是raymond hettiger根据mit许可证发布的recipe posted to ActiveState Recipes

hettiger的实现将其内容保存在一个由 结果,按索引查找一个项是一个O(N)操作,而 删除为o(1)。

为了高效查找,此版本进行了不同的权衡。它的 内容是标准的python列表,而不是双链接列表。这个 以O(N)删除为代价,按索引提供O(1)查找,以及 迭代速度稍快。

在python 3.6及更高版本中,内置的dict类型具有内在的顺序。如果你 忽略字典值,它还提供了一个简单的有序集 快速o(1)插入、删除、迭代和成员测试。但是,dict 不提供OrderedSet的列表式随机访问功能。你 必须将其转换为o(n)中的列表才能查找条目的索引或 按索引查找条目。

兼容性

orderedset在python 2.7、3.4、3.5、3.6和3.7上自动测试。 我们更非正式地检查了它在pypy和pypy3上的工作情况。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
异常如何在java中优雅地处理FileNotFoundexception   java线程卡在BlockingQueue上。无缘无故   类网格程序w/java   StrutsJava:动态应用Velocity脚本   java在运行时重写/禁用方面   java Apache POI无法正确读取Excel单元格中的秒数   具有不同用户权限的Java文件夹/文件创建   java我可以检查Firebase ValueEventListener onDataChanged是否已被调用吗?   尽管获得了用户权限,java Android开发文件权限仍被拒绝   java如何使用JPA映射map<EnumType,Double>?   java是否使用UI线程显示toast消息?   JAVAlang.IllegalArgumentException:不支持的元素:rss   java Android setRequestedOrientation活动和视图生命周期   安卓如何在Java中定义支票盒?   在Java中,对于大输入,字符串解析长期失败   使Java在XP中按计划任务运行读取env用户变量时出现问题   任务“:workflowsjava:NodeDriver”的梯度执行失败。main()   java如何检测是否只设置了部分属性?   在客户端web服务上使用JBossWS时,java无法找到/更改log4j的默认配置   java LibGDX写入文本文件并接收各种错误