【问题标题】:Python - Problem with checking if element is in listPython - 检查元素是否在列表中的问题
【发布时间】:2021-06-28 07:04:23
【问题描述】:

我在 Python 中遇到了一个问题,因为我这样做是为了好玩,而不是作为专业人士,我不明白为什么这不起作用。我有一个列表,其中包含其他列表,每个列表中有两个数字。这个函数应该检查元素 +1 和元素 -1 是否是我的 tp 列表的元素。如果是,请将它们附加到堆栈中。代码:

def check():
    tp = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 3], [3, 3]]
    stack = []
    for i in tp:
        a = i[0]
        b = i[1]
        if [(a - 1), (b - 1)] and [(a + 1), (b + 1)] in tp:
            stack.append(i)
    return stack

不幸的是输出是:

[[0, 1], [1, 1], [1, 2], [2, 2]]

[1, 2] 是正确的,因为 [0, 1][2, 3]tp 的元素。

[2, 2] 是正确的,因为 [1, 1][3, 3]tp 的元素。

为什么这个函数也给了我另外两个? 例如: tp 的第一个元素是 [0,1] -> [-1,0] 并且 [1,2] 应该是计算的输出,但显然 [-1,0] 不在此列表中。我的(可能很明显)错误在哪里?提前致谢。

【问题讨论】:

  • if [(a - 1), (b - 1)] in tp and [(a + 1), (b + 1)] in tp:
  • 因为您在第一个检查器if [(a - 1), (b - 1)] 中评估True = 列表不为空,即True,您必须在tp 中检查您的第一个检查器,因此True 评估得到True 用于元素..

标签: python list function for-loop if-statement


【解决方案1】:

if [(a - 1), (b - 1)] and [(a + 1), (b + 1)] in tp
应该是if [(a - 1), (b - 1)] in tp and [(a + 1), (b + 1)] in tp

[(a - 1), (b - 1)] 本身是一个非空列表,被认为是真实的,使您的 if if True and [(a + 1), (b + 1)] in tp

【讨论】:

    【解决方案2】:

    and 不会分发到 in。您的条件被解析为

    if [(a - 1), (b - 1)] and ([(a + 1), (b + 1)] in tp):
    

    由于[(a - 1), (b - 1)] 为真,条件总是成立。

    您需要为每个要检查的列表使用in

    if [(a - 1), (b - 1)] in tp and [(a + 1), (b + 1)] in tp:
    

    【讨论】:

      【解决方案3】:

      现在您正在检查两件事:

      1:[(a - 1), (b - 1)] 不为空(在您的示例中始终为 True

      2:[(a + 1), (b + 1)] in tp

      你要检查的是:([(a - 1), (b - 1)] in tp) and ([(a + 1), (b + 1)] in tp)

      def check():
          tp = [[0, 1], [1, 1], [1, 2], [2, 2], [2, 3], [3, 3]]
          stack = []
          for i in tp:
              a = i[0]
              b = i[1]
              if [(a - 1), (b - 1)] in tp and [(a + 1), (b + 1)] in tp:
                  stack.append(i)
          return stack
      

      【讨论】:

        【解决方案4】:

        你的条件语句不正确。

        应该是:

        if [(a - 1), (b - 1)] in tp and [(a + 1), (b + 1)] in tp:
        

        代替:

        if [(a - 1), (b - 1)] and [(a + 1), (b + 1)] in tp:
        

        使用if [(a - 1), (b - 1)] and [(a + 1), (b + 1)] in tp,条件评估为True,如果:

        1. [(a - 1), (b - 1)] 满足表示列表不为空
        2. [(a + 1), (b + 1)] in tp 满足

        由于条件 1 始终为 True,它归结为第二个条件,[0, 1][1, 1] 也满足,因此您也可以在结果中得到它。

        【讨论】:

          猜你喜欢
          • 2012-04-03
          • 1970-01-01
          • 2013-03-21
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-20
          • 1970-01-01
          相关资源
          最近更新 更多