是否存在允许有效范围查询的python数据结构?

时间:2017-05-19 15:01:24

标签: python data-structures window range

说,你有一个整数列表,例如

foo = [3,9,23,54,77,123,...]

是否存在高效数据结构,允许查询

x = everything in foo between 10 and 100

这样

x == [23,54,77]

或     x =一切< 50

x = [3,9,23]

等?

2 个答案:

答案 0 :(得分:5)

假设这些整数已经排序,它不是您想要的数据结构,而是一种算法:即二进制搜索。在Python中,这是由bisect module提供的。

因此,例如,找到小于50的所有成员:

from bisect import bisect_left
i = bisect_left(foo, 50)
result = foo[:i]

答案 1 :(得分:3)

range函数(或python 2中的xrange):

foo = [3,9,23,54,77,123]

x = [y for y in foo if y in range(10,101)]
# x = [23,54,77]

如果一侧有无限数字,请使用运算符并添加float(y).is_integer()以仅匹配整数:

x = [y for y in foo if y < 50 if float(y).is_integer()]
# x = [3,9,23]