繁体   English   中英

Python - 检查元素是否在列表中的问题

[英]Python - Problem with checking if element is in list

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

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

不幸的是 output 是:

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

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

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

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

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

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:

现在你正在检查两件事:

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

您的条件语句不正确。

它应该是:

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:

使用True中的if [(a - 1), (b - 1)] and [(a + 1), (b + 1)] in tp如果:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM