[英]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
如果:
[(a - 1), (b - 1)]
满足意味着列表不为空[(a + 1), (b + 1)] in tp
满足由于条件1
始终为True
,因此它归结为第二个条件, [0, 1]
和[1, 1]
也满足该条件,因此您也可以在结果中得到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.