Python 嵌套for循环的替代方法

Python 嵌套for循环的替代方法,python,bash,for-loop,Python,Bash,For Loop,我正在编写一个bash脚本,用于将几个位置与给定的开始位置/结束位置进行比较。 我有两个不同的文件(大小不同): 文件1:开始和结束位置(制表符分开) 文件2:单位置 Bash在处理循环时速度非常慢,我想到了使用python实现这种方法 python - << EOF posList=posString.split() endList=endString.split() startList=startString.split() for j, val2 in enumer

我正在编写一个bash脚本,用于将几个位置与给定的开始位置/结束位置进行比较。 我有两个不同的文件(大小不同):

  • 文件1:开始和结束位置(制表符分开)
  • 文件2:单位置
Bash在处理循环时速度非常慢,我想到了使用python实现这种方法

python - << EOF


posList=posString.split()
endList=endString.split()
startList=startString.split()

for j, val2  in enumerate(posList):
        for i, val1 in enumerate(startList):
                if val1 >= val2 and endList[i] <= val2:
                        print "true", val2
                else:
                        print "false", val2

EOF
python-=val2和endList[i]开始和位置
我的输入文件是字符串,空格用数字分隔

也许我完全走错了路,我希望不是,但是这个想法需要很长时间才能实现


非常感谢您的帮助。

如果您先对位置和范围进行排序,可以节省大量时间:

range_sorted_list = sorted(zip(start_list, end_list))
range_sorted_iter = iter(range_sorted_list)
pos_sorted_list = sorted(pos_list)

start, end = next(range_sorted_iter)

try:        
    for pos in pos_sorted_list:
        while pos >= end:
            start, end = next(range_sorted_iter)
        if start <= pos < end:
            print "True", pos
        elif pos < start:
            print "False", pos
except StopIteration:
    pass
range\u sorted\u list=sorted(zip(开始列表、结束列表))
范围排序的iter=iter(范围排序的列表)
已排序的位置列表=已排序(位置列表)
开始,结束=下一个(范围\u排序\u iter)
尝试:
对于pos_排序列表中的pos:
当pos>=结束时:
开始,结束=下一个(范围\u排序\u iter)

如果开始Itertools是一条路要走。乘积函数使用向量运算来提高执行效率

来自itertools导入产品的

posList=posString.split()
endList=endString.split()
startList=startString.split()
对于乘积(enumerate(posList),enumerate(startList))中的(j,val2),(i,val1):

如果val1>=val2和endList[i],我是否遗漏了一个具体的问题?你想知道什么?哦,对不起,我想知道你是否知道我如何加快这个过程?是否有替代我的嵌套for loopd的方法?
posString
endString
来自哪里?很难测试这一点,因为给定的代码不完整,必须首先导出示例值……我通过命令:endString=“$endJOIN”导入了一个bash数组。很抱歉,这是我第二次在论坛上写问题,所以忘了交重要信息。这些文件可能看起来像:endJOIN=“2 4 6 7 9”startJOIN=“1 3 4”posJOIN=“2 3 4 8”好的,所以每次位置在某个范围内时,您都希望输出
true
,对吗?每次位置不在某个范围内时,您都希望打印
false
。还有位置本身。这意味着您将始终打印n×m行,这是您想要的吗?非常感谢!它工作得真快!!好主意!
from itertools import product

posList=posString.split()
endList=endString.split()
startList=startString.split()

for (j, val2),(i,val1) in product(enumerate(posList),enumerate(startList)):
       if val1 >= val2 and endList[i] <= val2:
                print "true", val2
       else:
                print "false", val2,