Python 有没有更快的方法来检查一个数字是否在一个间隔内?

Python 有没有更快的方法来检查一个数字是否在一个间隔内?,python,list,Python,List,我有一个间隔列表,我一直在这样排序: intervals=['132-237','156-223','589-605',...] 然后,我得到一个数字,并想确定它包含在哪些间隔中: number=160 #number gotten for lines in intervals: lines=line.split(sep='-') if number>=int(lines[0]) and number<=int(lines[1]): record=r

我有一个间隔列表,我一直在这样排序:

intervals=['132-237','156-223','589-605',...]
然后,我得到一个数字,并想确定它包含在哪些间隔中:

number=160 #number gotten
for lines in intervals:
    lines=line.split(sep='-')
    if number>=int(lines[0]) and number<=int(lines[1]):
        record=record+1 #actually recording it more complicated
number=160#获取的编号
对于间隔中的行:
行=行.拆分(sep='-')

如果number>=int(第[0]行)和number,则可以使用元组列表

intervals = [(132,237),(156,223),(589,605)]
number = 160
for start, stop in intervals:
    if start <= number <= stop:
        print (start, stop)
interval=[(132237)、(156223)、(589605)]
数字=160
对于启动,请每隔一段时间停止:

如果start您可以使用元组列表

intervals = [(132,237),(156,223),(589,605)]
number = 160
for start, stop in intervals:
    if start <= number <= stop:
        print (start, stop)
interval=[(132237)、(156223)、(589605)]
数字=160
对于启动,请每隔一段时间停止:
如果开始
间隔=['132-237'、'156-223'、'589-605']
区间=[区间中i的元组(映射(int,i.split('-'))]
数字=160
对于低间隔、高间隔:
如果低
间隔=['132-237'、'156-223'、'589-605']
区间=[区间中i的元组(映射(int,i.split('-'))]
数字=160
对于低间隔、高间隔:
如果低以下是我的解决方案:

def inside_interval(num, interval):
    start, end = interval.split(sep='-')
    return num in range(int(start), int(end))
以及一些示例输出:

intervals = ['132-237', '156-223', '589-605']
print(inside_interval(150, intervals[0]))
print(inside_interval(123, intervals[1]))
print(inside_interval(600, intervals[2]))
# True, False, True
下面是使用for循环的示例(在列表理解中)。如果你真的想,你可以在这里使用另一个构造,但是你需要一个很好的理由

num = 160
intervals_list = [inside_interval(num, interval) for interval in intervals]
# intervals_list = [True, True, False]
这将获得与间隔列表相对应的布尔输出

我个人建议您将间隔转换为更有用的格式,而不是使用字符串。这将更容易进行其他比较。

以下是我的解决方案:

def inside_interval(num, interval):
    start, end = interval.split(sep='-')
    return num in range(int(start), int(end))
以及一些示例输出:

intervals = ['132-237', '156-223', '589-605']
print(inside_interval(150, intervals[0]))
print(inside_interval(123, intervals[1]))
print(inside_interval(600, intervals[2]))
# True, False, True
下面是使用for循环的示例(在列表理解中)。如果你真的想,你可以在这里使用另一个构造,但是你需要一个很好的理由

num = 160
intervals_list = [inside_interval(num, interval) for interval in intervals]
# intervals_list = [True, True, False]
这将获得与间隔列表相对应的布尔输出


我个人建议您将间隔转换为更有用的格式,而不是使用字符串。这将更容易进行其他比较。

使用树结构(或堆)。使用单点间隔应用“[a,b]=[number,number]查看如何实现间隔树。有什么原因不能使用for循环吗?如果速度是个问题,因为你有一个巨大的间隔列表,我不认为python是你的答案。@使用循环是一个O(n)算法。适当的数据结构将允许O(lg n)查找—无论涉及何种语言,这都是一个实质性的改进。使用树结构(或堆)。使用单点间隔“[a,b]=[number,number]查找实现间隔树。有什么原因不能使用for循环吗?如果速度是个问题,因为你有一个巨大的间隔列表,我不认为python是你的答案。@使用循环是一个O(n)算法。适当的数据结构将允许O(lg n)查找—这是一个实质性的改进,无论涉及何种语言。OP:“想要确定它包含在哪些间隔中”。
/
在Python2.2及更高版本中的工作原理与在Python3中的工作原理相同。它在Python3中的工作方式与Python2.OP中的工作方式不同:“想要确定它包含在哪些间隔中”。
/
在Python2.2及更高版本中的工作方式与在Python3中的工作方式相同。Python 3中的
/
与Python 2中的工作方式不同。由于OP要求的解决方案没有“for循环”,因此可以使用列表理解:
[tup for tup in interval if tup[0]@MarkkuK。谢谢你,我忽略了这一部分。虽然我不知道在列表理解中使用
for
比使用显式
for
-循环有什么好处。我会更新我的答案。对,这真的没什么大的区别。我最初把这个建议作为一个单独的答案发布,但我觉得这个改变太微不足道了是的,列表理解是一种解决方案-编码器看不到的循环-但在这种情况下它不会更快,因为OP要求的解决方案没有“for循环”,您可以使用列表理解来代替:
[tup for tup in interval if tup[0]@MarkkuK。谢谢你,我忽略了这一部分。虽然我不知道在列表理解中使用
for
比使用显式
for
-循环有什么好处。我会更新我的答案。对,这真的没什么大的区别。我最初把这个建议作为一个单独的答案发布,但我觉得这个改变太微不足道了是的,列表理解是一种解决方案——程序员看不到的循环——但在这种情况下它不会更快