给定一个元组列表:
total = [(4, 0), (2, 1), (1, 2), (3, 3)]
我想检查每个元组中是否第一个数字 == 第二个数字 + 1。
如果它们相等,我需要返回 False
,否则返回 True
。
我尝试了两种不同的方法,但都只检查第一个元组 ((4, 0)
) 然后返回 True
,尽管它应该返回 False
(因为第二个元组 (2, 1)
是 2 == 1 + 1
)。
尝试 #1:
for tuples in total:
if tuples[0]==(int(tuples[1])+1):
return False
else:
return True
尝试 2:
for a,b in total:
if a==b+1:
return False
else:
return True
我做错了什么?
最佳答案
您只测试列表中的第一个 元组。 return
结束函数。
在您决定返回True
i 之前测试所有 元组:
for a, b in total:
if a == b + 1:
return False
return True
所以当测试第一个元组时,a == b + 1
测试仍然是假的,所以你继续测试下一个元组。此时 (2, 1)
被测试并返回 False
。如果您要从输入中删除 (2, 1)
元组,则 for
循环结束并到达 return True
行。
您可以使用 all()
function ,加上逆检验(不等于)使上面的循环更紧凑:
return all(a != b + 1 for a, b in total)
当找到符合条件的元组时返回 False
,否则返回 True
。
关于python - 查找第一个元素等于第二个元素加一的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47609335/