Python列表帮助

Noa*_*ark 0 python list

我有一个列表列表,如下所示:

floodfillque = [[1,1,e],[1,2,w], [1,3,e], [2,1,e], [2,2,e], [2,3,w]]

for each in floodfillque:
    if each[2] == 'w':
        floodfillque.remove(each)
    else:
        tempfloodfill.append(floodfillque[each[0+1][1]])
Run Code Online (Sandbox Code Playgroud)

这是一个简化的,但我认为代码的相关部分.

floodfillque[each[0+1]]部件是否按照我的想法行事并在该位置获取值并添加一个或不添加?我问的原因是我得到这个错误:

TypeError:'int'对象是unsubscriptable

而且我认为我误解了代码实际上在做什么或做错了什么.

Ale*_*lli 5

除了您的代码中已经发现其他答案的错误之外,您还至少还有一个:

for each in floodfillque:
    if each[2] == 'w':
        floodfillque.remove(each)
Run Code Online (Sandbox Code Playgroud)

不要在正在循环的容器中添加或删除项目.虽然这种错误通常仅针对某些类型的容器(不包括列表)进行诊断,但对于列表来说同样糟糕 - 它最终会通过跳过某些项目或两次查看某些项目来改变您的预期语义.

如果您无法实质性地改变和增强您的逻辑(通常通过构建一个新的,单独的容器而不是与您正在循环的容器混淆),最简单的解决方法通常是循环您必须更改的容器的副本:

for each in list(floodfillque):
Run Code Online (Sandbox Code Playgroud)

现在,你的添加和删除不会改变你实际循环的内容(因为你循环的是一个副本,一个"快照",在循环开始时一劳永逸地制作)所以你的语义将按预期工作.

您改变的具体方法floodfillque也存在性能缺陷 - 它表现为二次方,而声音逻辑(构建新容器而不是改变原始容器)将表现为线性.但是,如果不将代码从当前不那么好的逻辑重构为新的,有根据的逻辑,那么这个bug就更难修复.