说,你有一个整数列表,例如
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]
等?
答案 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]