跳过基于列表的排序集合

skiplistcollections的Python项目详细描述


Build status

skip list collections是一个python模块,包含基于跳过列表的排序集合。skiplistcollections是用python编写的,并且可以使用:

  • cpython 2.6+,3.2+
  • Pypy 1.9+

github上的项目页:https://github.com/jstasiak/skiplistcollections

pypi上的项目页面:https://pypi.python.org/pypi/skiplistcollections

skiplistdict

SkipListDict是提供类似dict的接口并使用skip list实现的容器。它是按键永久排序的。

  • 迭代容器(以任意键开始,支持反向排序)是o(n)
  • 获取、设置和删除任意键的平均值为o(log n),最坏情况下为o(n)(退化跳过列表)

有关详细信息,请参见http://pythonsweetness.tumblr.com/post/45227295342/fast-pypy-compatible-ordered-map-in-89-lines-of-python

>>>fromskiplistcollectionsimportSkipListDict>>>things=SkipListDict(capacity=16)>>>len(things)0>>>things['x']=1>>>things.setdefault('x','DEFAULT')1>>>'x'inthingsTrue>>>len(things)1>>>things['g']=2>>>things['z']=3>>>tuple(things.keys())('g','x','z')>>>tuple(things.values())(2,1,3)>>>tuple(things.items())(('g',2),('x',1),('z',3))>>>tuple(things.items(start_key='x'))(('x',1),('z',3))>>>tuple(things.items(start_key='x',reverse=True))(('x',1),('g',2))>>>delthings['z']>>>things.update({'a':'A','b':'B'})>>>len(things)4>>>thingsSkipListDict({'a':'A','b':'B','g':2,'x':1},capacity=16)

如您所见,SkipListDict非常接近python dict接口。实际上它继承了MutableMapping抽象基类。

当然有区别:

  • 在创建时,需要设置最大的DICT大小
  • 尚不支持使用其他映射初始化
  • 不能将“无”用作键
  • itemskeysvalues是视图,接受start_keyreverse参数

技能集

SkipListSet使用跳过列表设置实现。它是按键永久排序的。

  • 迭代容器是o(n)
  • 添加、删除和检查在CONTAN中是否存在一个密钥是^ {EM1}$O(log n)平均,^ {EM1}$O(n)在最坏情况下(退化跳过列表)
>>>fromskiplistcollectionsimportSkipListSet>>>things=SkipListSet(capacity=16)>>>len(things)0>>>things.add(3)>>>len(things)1>>>things.add(1)>>>things.add(4)>>>thingsSkipListSet((1,3,4),capacity=16)>>>tuple(things)(1,3,4)>>>things.remove(2)Traceback(mostrecentcalllast):KeyError:2

更改

0.0.6

  • 修复了SkipListDict的错误,该错误在未找到启动密钥时产生太多项(Github问题1)

0.0.5

  • 修正了skiplistdict repr
  • 已创建SkipListSet

0.0.4

  • 在视图reprs中包括开始键和反转值
  • 改进的自述文件

0.0.3

  • items()values()keys()立即返回视图

0.0.2

  • 改进的自述文件

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

推荐PyPI第三方库


热门话题
java find安全漏洞不扫描groovy文件   java有没有办法将Jacoco设置为IntelliJ中的默认代码覆盖工具?   有人能帮我吗?我没有得到输出   java从另一个子类中不可用的超类调用子类方法   带undertow servlet容器的springboot应用程序中出现java“无通用密码套件”错误   java Listview:无法解析符号“setAdapter”   PostgreSQL行更改通知java程序,反之亦然   用于密码验证的java正则表达式第一个和最后一个字母不能有符号   java通过SNMP4J连接两台计算机   java如何使用sqlite部署javafx应用程序?   如何修复javax。邮政通过GMail使用SMTP时的MessaginException?   Selenium弹出窗口的java问题   Java主教棋盘算法   当抛出异常时,返回CompletableFuture的java方法执行两次