假设我有一个文本文件,其开头和结尾位置是这样的:
Start End
1 5
11 14
15 19
23 30
我想检查一组给定的值是否位于这些位置之间(包括这些位置),例如4,14,20将返回TRUE,TRUE,FALSE。
最有效的方法是什么?
想法1)我可以将每个可能的数字生成到列表中,并检查值是否在列表中-伪代码应如下所示:
list = []
values = [4,14,20]
for line in file:
for position in range(int(line.split()[0]),int(line.split()[1])+1):
list.append(position) #Populate list with every viable position
for value in values:
if value in list:
print("TRUE")
else:
print("FALSE")
想法2)而不是将每个可能的位置保存到列表中,仅保存开始和结束,然后在检查时遍历每个范围:
list = []
for line in file:
list.append(line) #Save only start and end into list
for value in values:
for start_end in list:
for position in range(int(start_end.split()[0]),int(start_end.split()[1])+1):
if value == position:
print("TRUE")
如果我的文件很大,我可能会怀疑想法1会占用很多内存,但是另一方面,想法2将需要更长的运行时间,因为它需要迭代很多?
或者是否有一些完全不同的更好的方法?非常感谢!
验证值在一组范围内
我不知道我是否误解了,但是为什么不尝试这样的事情?它更容易且有效。
使用open
创建指向大文件的链接后,一次可以读取一行。举一个简短的例子:
我的解决方案简单明了,但是它允许处理大文件,并且不需要任何索引/枚举:
我认为您也不需要范围
优化您的“想法2”:
使用DataFrame的示例: