2013-04-04 99 views
0

我不理解的行为Python是给我下面的:Python的名单中删除,并遍历列表

>>> adj = gx.g.neighbors('v') 
>>> adj 
['x', 'w'] 
>>> gx.d['x'] 
[13, 14, 'black', 'v'] 
>>> gx.d['w'] 
[9, 333, 'black', 'v'] 
>>> for x in adj:     #for every element in the list 
... print "x", x, gx.d[x] 
... print "color", gx.d[x][2] 
... if gx.d[x][2] != 'white': 
...  adj.remove(x) 
... 
x x [13, 14, 'black', 'v'] 
color black 
>>> adj 
['w'] 

我不明白的是为什么似乎只有元素'x'在获取打印循环。 'w'发生了什么事。算法分段的输出应为空列表,因为adj的两个元素均为黑色。

+3

你遍历一个列表,并在同一时间删除元素。这不是一个好主意。 – Blender 2013-04-04 03:12:38

+0

我想我以前在Java中这样做过?每种语言的静态/动态性质是否有所不同? – CodeKingPlusPlus 2013-04-04 03:14:29

+1

在两种语言中这样做是一个糟糕的主意。 – Blender 2013-04-04 03:16:09

回答

4

而不是删除的元素,使一个新的列表:

new_adj = [x for x in adj if gx.d[x][2] == 'white']