我有许多Python对象的列表,如下所示:
class RangeClass(object):
def __init__(self,address,size):
self.address=address
self.size=size
#other attributes and methods...
然后,我有一个RangeClass对象的列表(rangelist)。在
我需要找出给定值在哪个范围内。在
我可以用这样的代码:
^{pr2}$
但我认为有一个更快的方法。范围有任意大小,但我们可以假设它们不重叠。在
谢谢。在
Tags:
在Range中实现比较运算符,对范围列表进行排序,并使用bisect搜索值所属的范围:
不是真的。您所能做的就是利用Python的关系运算符链接。在
您还可以在
^{pr2}$RangeClass
上定义__contains__
,以允许您使用in
来查找它。在如果有许多值要测试,那么可以使用bisect module更快地找到这些值所在的范围。在
如果
m
=要测试的值的数目,以及然后按照您的建议在值和范围列表中循环将花费
O(m*n)
时间。在如果使用二等分,则必须首先对起始地址
O(nlogn)
进行排序,并找到每个值在范围列表O(m*logn)
中的位置。 所以如果然后平分获胜。对于大的
^{pr2}$n
,与O(m*n)
相比,O(m*logn)
很小。 因此,如果或者等效地,当
对于某个常数C
因此,当
n
较大且C log(n) < m
时,您可以尝试类似的方法相关问题 更多 >
编程相关推荐