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
-循环有什么好处。我会更新我的答案。对,这真的没什么大的区别。我最初把这个建议作为一个单独的答案发布,但我觉得这个改变太微不足道了是的,列表理解是一种解决方案——程序员看不到的循环——但在这种情况下它不会更快