跳转到主要内容

有序集合是一个自定义的可变集合,它记录其顺序,因此每个

项目描述

Pypi

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

安装

ordered_set可在PyPI上找到,并以wheel的形式打包。您可以将它作为项目的依赖项列出,无论其形式如何。

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

pip install ordered-set

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

pip install flit
flit install

用法示例

有序集合的创建和使用类似于集合

>>> 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

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 的“花哨索引”。

>>> letters = OrderedSet('abracadabra')

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

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

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

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

OrderedSet 在数据科学中的应用

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

这些功能的组合使得 OrderedSet 成为了许多 pandas.Index 用法的简单实现,并且许多操作的速度比等效的 pandas 操作更快。

为了与 pandas.Index 更好地兼容,get_loc(pandas 查找单个索引的方法)和 get_indexer(pandas 反向花哨索引的方法)都是 index(在 OrderedSet 中处理两种情况)的别名。

作者

OrderedSet 由 Elia Robyn Lake(原名:Robyn Speer)实现。Jon Crall 贡献了更改和测试,使其符合 Python 集合 API。Roman Inflianskas 添加了原始类型注解。

比较

OrderedSet 的原始实现是由 Raymond Hettiger 在 ActiveState Recipes 发布的 菜谱,该菜谱在 MIT 许可下发布。

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

这个版本为了高效的查找做了不同的权衡。它的内容是一个标准的 Python 列表,而不是双向链表。这提供了通过索引进行 O(1) 查找的能力,但以 O(N) 删除和稍微快一点的迭代为代价。

在 Python 3.6 及以后的版本中,内置的 dict 类型天生有序。如果你忽略字典值,这也给你提供了一个简单的有序集合,具有快速的 O(1) 插入、删除、迭代和成员测试。然而,dict 不提供 OrderedSet 的类似列表的随机访问功能。你必须将其转换为列表,以 O(N) 的速度查找条目的索引或通过索引查找条目。

项目详情


下载文件

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

源代码分发

ordered-set-4.1.0.tar.gz (12.8 kB 查看哈希)

上传时间 源代码

构建分发

ordered_set-4.1.0-py3-none-any.whl (7.6 kB 查看哈希)

上传于 Python 3

由支持