Python 如何仅中断一个嵌套循环
我有两个以制表符分隔的文件,我需要对照另一个文件中的所有行测试第一个文件中的每一行。比如说, 文件1: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行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
只会将您从最里面的循环中分离出来。相关: