我有两条线:
Rob car Mary bike George House Jerry Condo Risk High
Rob car Mary dc George dc Jerry dc
首先,我去掉最后两个单词的第一个字符串。我只想将string1中的car
、bike
、house
、condo
这样的单词与string2中的car
、dc
这样的单词进行比较。所以,我创建了元组(car, car)
、(bike, dc)
、(house, dc)
和(condo dc)
。你知道吗
通过比较元组中的单词,我需要将risk
打印为high
或low
。有时在元组中,存在一个dc
。这意味着dc
可以接受任何输入,例如bike
、house
、condo
。我不在乎在那一点上出现的词。你知道吗
但是,当元组中的两个单词都是car
时,我只想将risk
打印为high
,即car == car
。这里,我不关心存在dc
的其他元组,因为它们可以接受任何输入。但是,当元组中的单词是不同的car
和house
时,我不想打印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
我想问题出在你的台词上。
all(...)
中的理解将为您的示例输入生成以下内容:这是因为您将
(word1 == word2) or (word2 == 'dc') == True
包装在方括号中,从而创建了一个列表。但是,任何非空列表的计算结果都是True
,因此这里的all(...)
将始终计算结果是True
,因为您在非空列表列表上调用它。你知道吗从
all(...)
的理解中去掉方括号,你就应该很好了。你知道吗我想你要找的案子是:
第一个(
any
)检查找到一对房子,第二个(all
)检查没有不匹配的房子,除非房子的后半部分是"dc"
。你知道吗相关问题 更多 >
编程相关推荐