使用等于第二个加1的第一个元素查找元组

时间:2017-12-02 15:17:15

标签: python python-2.7 list tuples

给出一个元组列表:

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

我做错了什么?

2 个答案:

答案 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