有序集合是一个自定义的可变集合,它记录其顺序,因此每个
项目描述
有序集合是一个可变的数据结构,是列表和集合的混合体。它记录其条目的顺序,每个条目都有一个可以查询的索引号。
安装
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.MutableSet
和 collections.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) 的速度查找条目的索引或通过索引查找条目。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。