一种可变集,它能记住它的顺序,因此每个条目都有一个索引。
ordered-set的Python项目详细描述
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.MutableSet
和
collections.Sequence
。
与numpy和pandas的互操作性
OrderedSet可以用作稀疏对象之间的双向映射 词汇和密集指数。从3.1版开始,它接受numpy数组 索引号和列表。
这些特性的组合使orderedset成为许多
使用pandas.Index
的对象中,有许多操作是
比同类熊猫行动快。
为了进一步与pandas兼容,index,get_loc
(pandas方法
查找单个索引)和get_indexer
(pandas方法
“反向索引”是^ {CD14}}的别名(处理这两种情况)
在OrderedSet中)。
键入提示
要使用类型提示功能,请从安装ordered-set-stubs
包
PyPI:
$ 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上的工作情况。