快速查找数值范围中的值。

rangetree的Python项目详细描述


https://img.shields.io/pypi/v/rangetree.svghttps://travis-ci.org/nanobit/rangetree.svg?branch=masterhttps://coveralls.io/repos/github/nanobit/rangetree/badge.svg?branch=master

rangetree是一个Apache2许可的库,用Python3编写,方便快捷 数值范围的查找。

给定三个整数范围:0-9、10-99和100-999,rangetreemakes 精确地查找任何整数所属的范围是很简单的。(注意python 切片和范围包括第一个索引,不包括第二个。

>>>fromrangetreeimportRangeTree>>>>>>r=RangeTree()>>>r[0:10]='single digits'>>>r[10:100]='double digits'>>>r[100:1000]='triple digits'>>>>>>r[4]'single digits'

RangeTrees针对查找进行了优化,并利用了 Bintrees图书馆。

功能

  • 支持打开和关闭范围
  • 支持整数键
  • 为查找优化(不是插入)

安装

要安装rangetree,只需:

$ pip install rangetree

用法

插入是使用python的切片表示法或range对象完成的。

>>>r=RangeTree()>>>r[0:10]='single digits'>>>r[range(10,100)]='double digits'

支持负整数。

>>>r[-10:0]='negative singles'

缺少范围将导致KeyError。使用Rangetree.get()in运算符。

>>>1000inrFalse>>>r[1000]Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"rangetree.py",line93,in__getitem__raiseKeyError(key)KeyError:1000>>>r.get(1000,'no value')'no value'

支持开放范围(指向或来自无穷远)。只设置开放范围 可以使用切片表示法。

>>>r[1000:]='quadruple digits or more'>>>r[999999999]'quadruple digits or more'

重叠的范围将导致KeyError

>>>r=RangeTree()>>>r[1000:]='quadruple digits or more'>>>r[10000:]='ten thousand'Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>File"rangetree.py",line58,in__setitem__raiseKeyError('Overlapping intervals.')KeyError:'Overlapping intervals.'

rangetree很快。使用perf,给定2000个间隔:

$ pyperf timeit --rigorous -g --duplicate 5 -s "from rangetree import RangeTree; r = RangeTree()" -s "for i in range(2000):" -s " r[i*10:i*10+10] = i""r[500]"
.........................................
3.75 us:  1#######
3.77 us:  2#############
3.80 us:  9###########################################################
3.82 us:  5#################################
3.84 us:  8#####################################################
3.86 us:  9###########################################################
3.89 us:  7##############################################
3.91 us:  8#####################################################
3.93 us:  8#####################################################
3.95 us:  6########################################
3.98 us: 10##################################################################
4.00 us: 12###############################################################################
4.02 us:  5#################################
4.05 us:  9###########################################################
4.07 us:  5#################################
4.09 us:  6########################################
4.11 us:  3####################
4.14 us:  4##########################
4.16 us:  2#############
4.18 us:  0|4.20 us:  1#######

Median +- std dev: 3.97 us +- 0.11 us

查找的大概数字是个位数微秒。

更改日志

1.0(2016-10-20)

首次公开发行。

贡献

我们非常欢迎您的贡献。测试可以用tox运行,请确保 在提交请求之前,覆盖范围至少保持不变。

学分

rangetree的开发由Nanobit赞助。

rangetree由david r.maciver用Hypothesis进行测试。

rangetree由Victor Stinner使用perf进行基准测试。

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

推荐PyPI第三方库


热门话题
java SimpleCursorAdapter删除值   java结束while循环条件   java检查设备是否连接到特定网络   java组织。冬眠MappingException找不到逻辑名称为annotation getter的列   为什么java邮件中会抛出此异常?   加载SDK时发生java Eclipse错误   返回奇怪输出的Java数组   JavaXStream和对象类序列化   将枚举列表传递给namedQuery后出现java非法转换异常。Hibernate中的setParameter()   java Android studio不允许我在字符串上使用开关?   有没有办法从Java程序访问存储在Chrome中的cookie   java在枚举中构造实例而不修改枚举类   java Blackberry JDE FieldChangeListener   java修复错误:未报告的异常InterruptedException   java Spring数据JPA:findAll(具有规范和可分页)在计数查询中失败