跳过基于列表的排序集合

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在“for语句”中打印数组   使用jaxb外部绑定自定义时发生java错误   jdbc如何在Java(ProcessBuilder)中创建GlassFish的连接池   java正在尝试打印名称   java在Spring表达式语言中使用正则表达式提取子字符串   java如何将字符串流式传输到另一个类   jakarta ee ResourceBundle来自Java/Struts和replace表达式   tomcat支持java的可能原因。网SocketInputStream。socketRead0   java无法从joda dateTime对象中删除毫秒   java永远隐藏导航栏   具有更多字段的java ItemizeOverlay   使用jsptag的java搜索记录   java如何在Android Q中检查互联网连接?   java如果1是标准的EOF字节,为什么DataInputStream会这样做?   线程环境中的多线程mongodb java客户端断开连接   java正则表达式中的非捕获组   java疯狂拍卖定制售价   java Mybatis自动映射以支持dot   java在线获取原始格式的JSON URL   java意外字符“ï”,使用Jackson解析JSON