给出一个元组列表:
total = [(4, 0), (2, 1), (1, 2), (3, 3)]
我想检查每个元组中的第一个数字==第二个数字+ 1。
如果它们相等,我需要返回False
,否则返回True
。
我尝试了两种不同的方法,但都检查了第一个元组((4, 0)
),然后返回True
,尽管它应该返回False
(因为第二个元组{{1} }是(2, 1)
)。
尝试#1:
2 == 1 + 1
尝试2:
for tuples in total:
if tuples[0]==(int(tuples[1])+1):
return False
else:
return True
我做错了什么?
答案 0 :(得分:3)
您只是在列表中测试第一个元组。 return
结束了该功能。
在您决定返回True
之前测试所有元组:
for a, b in total:
if a == b + 1:
return False
return True
因此,当测试第一个元组时,a == b + 1
测试仍为false,因此您继续测试下一个元组。此时(2, 1)
已经过测试,并返回False
。如果您要从输入中删除(2, 1)
元组,则for
循环结束并到达return True
行。
您可以使用all()
function和反向测试(不相等)来使上述循环更紧凑:
return all(a != b + 1 for a, b in total)
在找到符合条件的元组时,会返回False
,否则为True
。
答案 1 :(得分:1)
你可以试试这个:
def tuple_listing(s):
return not any(c == b+1 for c, b in s)
total=[(4, 0), (2, 1), (1, 2), (3, 3)]
print(tuple_listing(total))
输出:
False