Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅中断一个嵌套循环_Python_Loops_Nested_Break - Fatal编程技术网

Python 如何仅中断一个嵌套循环

Python 如何仅中断一个嵌套循环,python,loops,nested,break,Python,Loops,Nested,Break,我有两个以制表符分隔的文件,我需要对照另一个文件中的所有行测试第一个文件中的每一行。比如说, 文件1: 第1行c1 36 345 A 第2行c3 36 9949 B 第3排c4 36 858 C 文件2: 第1行c1 3455 3800 第2排c3 6784 7843 第3行c3 10564 99302 第4排c5 1405 1563 假设我想输出(file1)中的所有行,其中file1的col[3]小于file2的任何(不是每个)col[2],因为col[1]是相同的 预期产出: 第1行c

我有两个以制表符分隔的文件,我需要对照另一个文件中的所有行测试第一个文件中的每一行。比如说,

文件1:

第1行c1 36 345 A
第2行c3 36 9949 B
第3排c4 36 858 C
文件2:

第1行c1 3455 3800
第2排c3 6784 7843
第3行c3 10564 99302
第4排c5 1405 1563
假设我想输出(file1)中的所有行,其中file1的col[3]小于file2的任何(不是每个)col[2],因为col[1]是相同的

预期产出:

第1行c1 36 345 A
第2行c3 36 9949 B
由于我在Ubuntu中工作,我希望输入命令如下所示:
python code.py[file1][file2]>[output]

我编写了以下代码:

import sys

filename1 = sys.argv[1]
filename2 = sys.argv[2]

file1 = open(filename1, 'r')
file2 = open(filename2, 'r')

done = False

for x in file1.readlines():
    col = x.strip().split()
    for y in file2.readlines():
        col2 = y.strip().split()
        if col[1] == col2[1] and col[3] < col2[2]:
            done = True
            break
        else: continue
print x

这对于较大的数据集是显而易见的,但基本上我总是只得到嵌套循环中条件为真的最后一行。我怀疑“中断”会使我摆脱这两个循环。我想知道(1)如何只中断一个for循环,以及(2)这是否是我在这里遇到的唯一问题。

break
continue
应用于最里面的循环

问题是您只打开第二个文件一次,因此它只被读取一次。第二次在file2.readlines()中为y执行
时,
file2.readlines()
返回一个空的iterable


file2=open(filename2,'r')
移动到外部循环中,或者使用
seek()
倒带到
file2
的开头。您需要将数字字符串解析为相应的整数值

您可以使用
int('hoge')
如下所示

import sys

filename1 = sys.argv[1]
filename2 = sys.argv[2]

with open(filename1) as file1:
    for x in file1:
        with open(filename2) as file2:
            col = x.strip().split()
            for y in file2:
                col2 = y.strip().split()
                if col[1] == col2[1] and int(col[3]) < int(col2[2]):
                    print x
导入系统 filename1=sys.argv[1] filename2=sys.argv[2] 打开(filename1)作为file1: 对于文件1中的x: 打开(filename2)作为file2: col=x.strip().split() 对于文件2中的y: col2=y.strip().split() 如果col[1]==col2[1]和int(col[3])
break
只会将您从最里面的循环中分离出来。相关: