我在查找元素是否已存储在Python代码的列表中时遇到了一些麻烦。我使用了两个脚本。我写的第二个结果是工作,但第一个没有,我不明白为什么(而且它困扰我)。我所拥有的列表名为grains
,如下所示:
[[a, b], [c, d], [e, f], ...]
。
这是第一段代码,不起作用:
for i in range(0, len(grains) - 1) :
if grains[i] == [x,y] :
return
else :
grains.append([x,y])
grains_restants = grains_restants - 1
fourmi_chargee = False
return
这是第二段代码,这个代码有效:
if not([x,y] in grains) :
grains.append([x,y])
grains_restants = grains_restants - 1
fourmi_chargee = False
return
所以我试着理解为什么第一段代码不起作用,但我放弃了。你知道为什么吗?
答案 0 :(得分:2)
您的第一段代码不会循环列出grains
作为您的期望,它实际上只会比较grains[0] == [x, y]
,而for
循环将因您{{1}而退出在return
和if
分支中,第二个实现将检查else
是否在整个列表[x, y]
中。
你应该 NOT 使用这样的代码,但grains
循环代码应该是:
for
答案 1 :(得分:1)
g++ -std=c++11 main.cpp department.cpp
您要将列表中的每个元素与for i in range(0, len(grains) - 1) :
if grains[i] == [x,y] :
return
else :
grains.append([x,y])
grains_restants = grains_restants - 1
fourmi_chargee = False
return
进行匹配,但您确实想要检查[x,y]
是否已存在。这是第二个代码段使用[x,y]
运算符执行的操作。
现在为什么第一个不起作用?你没有提到你得到的错误/意外情况,但我可以看到一个。我们假设in
元素在索引3(第4项)中。但是你要将它与0,1,2 =>进行比较。所有人都不会匹配并添加重复的项目,然后返回。这真的不是你想要的。
要检查元素是否存在,使用[x,y]
运算符是最好的主意。您还可以使用in
查看列表中是否存在任何元素(以及它在该列表中出现的次数)。