【问题标题】:Finding tuple with first element equal to the second plus one查找第一个元素等于第二个加一的元组
【发布时间】:2017-12-02 15:17:14
【问题描述】:

给定一个元组列表:

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

我做错了什么?

【问题讨论】:

  • 你应该在学习的时候切换到 3.6+ 版本 - pythonclock.org
  • 如果您现在正在学习 Python,我强烈建议您学习 Python 3 而不是 Python 2。Python 2 现在是一种传统语言,支持将在 2 年多的时间内结束。

标签: python python-2.7 list tuples


【解决方案1】:

您只是在测试列表中的 first 元组。 return 结束函数。

在您决定返回Truei 之前测试所有元组:

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

【讨论】:

    【解决方案2】:

    你可以试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      相关资源
      最近更新 更多