跳转到主要内容

StableSet 和 OrderedSet 是有序集合,可以记住它们的顺序,并允许通过索引查找该顺序中的项目。

项目描述

Pypi

StableSet 是一个可变集合,可以记住它的插入顺序。特性:快速 O(1) 插入、删除、迭代和成员资格测试。但索引查找慢 O(N)。

OrderedSet 是一种可变的数据结构,它是列表和集合的混合体。它记住它的插入顺序,以便每个条目都有一个可以查找的索引。特性:O(1) 索引查找、插入、迭代和成员资格测试。但删除慢 O(N)。

它们具有相似的接口,但在实现和性能方面有所不同。

安装

stableset 在 PyPI 上可用,并打包为 wheel。您可以将它列为项目的依赖项,形式不限。

要将它安装到您的当前 Python 环境中

pip install stableset

在检出存储库后,安装开发代码

pip install flit
flit install

用法示例

OrderedSet 的创建和使用类似于集合

>>> from ordered_set import OrderedSet

>>> letters = OrderedSet('abracadabra')

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

>>> 'r' in letters
True

在有序集合中查找条目的索引或根据索引查找条目是高效的。为了帮助此用例,.add() 方法返回添加项的索引,无论它是否已在集合中。

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

>>> letters[2]
'r'

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

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

有序集合实现了与集合相同的并集(|)、交集(&)和差集(-)操作。

>>> 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的“复杂索引”。

>>> letters = OrderedSet('abracadabra')

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

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

有序集合实现了__getstate____setstate__,因此可以被序列化,并实现了抽象基类collections.MutableSetcollections.Sequence

有序集合可以用作通用的集合类型,类似于typing模块中的集合,如List、Dict和Set。例如,可以将变量的类型注释为OrderedSet[str]OrderedSet[Tuple[int, str]]

有序集合在数据科学应用中

有序集合可以用作稀疏词汇和密集索引数字之间的双向映射。从版本3.1开始,它除了接受列表外,还可以接受索引数字的NumPy数组。

这些功能的组合使得有序集合成为许多类似于pandas.Index所使用功能的简单实现,并且许多操作的速度比等效的pandas操作要快。

为了与pandas.Index有更好的兼容性,get_loc(查找单个索引的pandas方法)和get_indexer(在pandas中反向执行复杂索引的方法)都是index的别名(在有序集合中处理这两种情况)。

作者

StableSet是由Idan Miara实现的,它建立在有序集合的基础上。有序集合是由Elia Robyn Lake(原名Robyn Speer)实现的。Jon Crall对其进行了修改和测试,使其符合Python集合API。Roman Inflianskas添加了原始类型注解。

比较

StableSet 是一个可变集合,可以记住它的插入顺序。特性:快速 O(1) 插入、删除、迭代和成员资格测试。但索引查找慢 O(N)。

OrderedSet 是一种可变的数据结构,它是列表和集合的混合体。它记住它的插入顺序,以便每个条目都有一个可以查找的索引。特性:O(1) 索引查找、插入、迭代和成员资格测试。但删除慢 O(N)。

它们具有相似的接口,但在实现和性能方面有所不同。

有序集合的原始实现是由Raymond Hettiger发布到ActiveState Recipes的一个食谱,采用MIT许可证。

Hettiger的实现将内容保存在一个由字典引用的双向链表中。因此,通过索引查找一个项目是O(N)操作,而删除是O(1)。

这个版本的有序集合为了高效的查找进行了不同的权衡。其内容是一个标准的Python列表,而不是双向链表。这提供了O(1)的索引查找,但删除是O(N),以及稍微快一点的迭代。

其他实现

包含的有序集合实现与以下实现完全兼容(它们之间并不完全兼容)

包含的StableSet实现与以下实现完全兼容

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

此版本没有可用的源代码分发文件。请参阅生成分发存档的教程

构建的分发

stableset-5.2.1-py3-none-any.whl (19.3 kB 查看散列值

上传于 Python 3

支持者