如果所有字比较都是tru,则Python Print high

2024-03-29 08:07:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条线:

Rob car Mary bike George House Jerry Condo Risk High

Rob car Mary dc George dc Jerry dc

首先,我去掉最后两个单词的第一个字符串。我只想将string1中的carbikehousecondo这样的单词与string2中的cardc这样的单词进行比较。所以,我创建了元组(car, car)、(bike, dc)(house, dc)(condo dc)。你知道吗

通过比较元组中的单词,我需要将risk打印为highlow。有时在元组中,存在一个dc。这意味着dc可以接受任何输入,例如bikehousecondo。我不在乎在那一点上出现的词。你知道吗

但是,当元组中的两个单词都是car时,我只想将risk打印为high,即car == car。这里,我不关心存在dc的其他元组,因为它们可以接受任何输入。但是,当元组中的单词是不同的carhouse时,我不想打印high,即car != house。同样,我不关心有dc的元组,因为它可以接受任何输入。你知道吗

为了解决这个问题,我编写并尝试了这段代码来进行比较,但是,它失败了并打印了high。例如

当我使用下面的代码时,我得到了这两个字符串的high

Rob house Mary bike George House Jerry Condo Risk High

Rob car Mary dc George dc Jerry dc

这是因为第一个元组中的单词是(house,car)和house != car。 我应该怎么做才能使它打印正确的值?你知道吗

 def compareLines(devLine, f_hyp):
      global count 
      devSplit = devLine.split()

      risk_val = devSplit[-1]
      risk_attrib = devSplit[-2]
      devSplit = devSplit[:8]

      hypSplit = f_hyp.split()

      if all([(word1 == word2) or (word2 == 'dc') == True] for word1, word2 in zip(devSplit[1::2], hypSplit[1::2])):
           risk_setVal = "high"

           if risk_val != risk_setVal:
                count += 1

           print risk_setVal 

       else:
           risk_setVal =  "low"
           print risk_setVal 

Tags: dc单词carhouse元组riskrobhigh
2条回答

我想问题出在你的台词上。all(...)中的理解将为您的示例输入生成以下内容:

[[False], [True], [True], [True]]

这是因为您将(word1 == word2) or (word2 == 'dc') == True包装在方括号中,从而创建了一个列表。但是,任何非空列表的计算结果都是True,因此这里的all(...)将始终计算结果是True,因为您在非空列表列表上调用它。你知道吗

all(...)的理解中去掉方括号,你就应该很好了。你知道吗

我想你要找的案子是:

pairs = zip(devSplit[1::2], hypSplit[1::2])
if (any(a == "car" and b == "car" for a, b in pairs) and 
    all(a == b or b == "dc" for a, b in pairs)):
    print("High")

第一个(any)检查找到一对房子,第二个(all)检查没有不匹配的房子,除非房子的后半部分是"dc"。你知道吗

相关问题 更多 >