python:if(字符串Y中的子字符串X)仅对最后一个字符为真?

时间:2016-08-31 19:50:01

标签: python python-3.x

此子代码仅在子字符串结尾时返回true。如何修复它以考虑任何子字符串?数据如下所示:

预测:

  1. 实际:

    1. 红色,狗

    2. 猫,蓝

    3. 返回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有效!预期输出为真,真实

4 个答案:

答案 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\nred,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 狗,猫不匹配。