此子代码仅在子字符串结尾时返回true。如何修复它以考虑任何子字符串?数据如下所示:
预测:
狗
猫
实际:
红色,狗
猫,蓝
返回true然后返回false
with open("test_class.txt") as g:
prediction = g.readlines()
with open("y_smallTest.txt") as g:
actual = g.readlines()
for n in range(len(prediction)):
if prediction[n] in actual[n]:
correct += 1
else:
incorrect +=1
编辑:.rstrips有效!预期输出为真,真实
答案 0 :(得分:1)
X,Y
260,204
409,208
260,60
272,181
367,257
315,208
381,294
66,333
246,220
330,207
342,304
...
为您提供每行包含行尾的换行符。因此,您需要进行readlines
之类的比较。由于在正确的位置没有换行符,因此检查失败。
尝试此操作从每行末尾删除换行符:
"cat\n" in "cat,blue\n"
修改强>
也许更好的重写是使用zip并只是遍历文件:
with open("test_class.txt") as g:
prediction = [line.rstrip() for line in g]
with open("y_smallTest.txt") as g:
actual = [line.rstrip() for line in g]
for n in range(len(prediction)):
if prediction[n] in actual[n]:
correct += 1
else:
incorrect +=1
答案 1 :(得分:0)
'cat' in 'cat,blue'
返回True
请对您的剧本进行细微更改
if prediction[n].strip() in actual[n]
答案 2 :(得分:0)
readlines
返回的列表中的项目将在每行末尾包含\n
,因此您实际测试'dog\n' in 'red,dog\n'
,这是很好,'cat\n' in 'cat,blue\n'
,不是。
要解决此问题,您可以使用strip()
删除行终止符(以及任何其他封闭的空格)。
答案 3 :(得分:0)
您只需要从第一个文件的每一行 rstrip 换行符,这样您就不会将dog\n
与red,dog\n
进行比较,您正在测试的字符串上的换行符无关紧要。您还可以使用 zip 并逐行读取文件,并输入 readlines 和索引的需求:
with open("test_class.txt") as f1, open("y_smallTest.txt") as f2:
correct = incorrect = 0
for a, b in zip(f1, f2):
if a.rstrip() in b:
correct += 1
else:
incorrect += 1
如果您需要完全匹配,则需要在逗号上 rstrip 和拆分:
with open("test_class.txt") as f1, open("y_smallTest.txt") as f2:
correct = incorrect = 0
for a, b in zip(f1, f2):
if a.rstrip() in b.rstrip().split(","):
correct += 1
else:
incorrect += 1
分裂的区别意味着 dog 与狗,猫不匹配。