使用Python中的循环搜索列表中的元素

时间:2017-04-17 08:29:53

标签: python list loops search

我在查找元素是否已存储在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

所以我试着理解为什么第一段代码不起作用,但我放弃了。你知道为什么吗?

2 个答案:

答案 0 :(得分:2)

您的第一段代码不会循环列出grains作为您的期望,它实际上只会比较grains[0] == [x, y],而for循环将因您{{1}而退出在returnif分支中,第二个实现将检查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查看列表中是否存在任何元素(以及它在该列表中出现的次数)。