我有以下元组列表。我试图测试一个负面情况以使条件失败。
>>> regop = [('1000', '63', 'Untaggged', '1000')]
我正在尝试写一个条件:
>>> if int(regop[0][0]) != 1000 and int(regop[0][1]) != 63 and regop[0][2] != 'Untaggged' and int(regop[0][3]) == 100:
... print "error"
在这种情况下,int(regop[0][3]) == 100
为False
,其余3个条件为True
,但由于我使用了and
,因此if
不应该条件失败并打印error
?它打印Error
。
我对这里出了什么问题毫无头绪。帮助将不胜感激!
答案 0 :(得分:2)
如果您希望or
触发评估为and
的任何条件,则需要if
代替True
作为对当前解决方案的改进,我建议使用any
。
vals = (1000, 63, 'Untaggged', 100)
if any(x != y for x, y in zip(regop[0], vals)):
print('error')
如果即使单个条件在生成器理解中求值为any
, True
也会返回True
。相反,如果您希望仅当理解中的每个条件为any
时结果为all
,请将True
替换为True
。
使用any
/ all
消除了多次硬编码x1 != y1 or x2 != y2 or ...
的需要,并产生简洁的代码。