检查Python中开始和结束位置范围内是否存在值的最有效方法是?

问题描述 投票:1回答:7

假设我有一个文本文件,其开头和结尾位置是这样的:

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将需要更长的运行时间,因为它需要迭代很多?

或者是否有一些完全不同的更好的方法?非常感谢!

python performance python-3.7 memory-efficient
7个回答
3
投票

验证值在一组范围内


1
投票

我不知道我是否误解了,但是为什么不尝试这样的事情?它更容易且有效。


0
投票

使用open创建指向大文件的链接后,一次可以读取一行。举一个简短的例子:


0
投票

我的解决方案简单明了,但是它允许处理大文件,并且不需要任何索引/枚举:


-1
投票

我认为您也不需要范围


-1
投票

优化您的“想法2”:


-2
投票

使用DataFrame的示例:

© www.soinside.com 2019 - 2024. All rights reserved.