2012-05-18 3 views
1

파이썬리스트에서 제거 될 것으로 예상되는 항목이 남아 있고 다른 항목이 제거되었습니다. 왜 그런가요?왜 Python 스크립트가 일부 항목 위로 건너 뛰고 다른 항목 위로 건너 뛰지 않습니까?

여기
def getAdjacent(pos, bounds): 
    posibles = [ 
    [pos[0]-1, pos[1]], 
    [pos[0]+1, pos[1]], 
    [pos[0], pos[1]-1], 
    [pos[0], pos[1]+1]] 
    for p in posibles: 
     if isOutside(p,bounds): 
      posibles.remove(p) 
    return posibles 


def isOutside(pos, bounds): 
    if pos[0] > bounds[0]-1 or pos[0] < 0 or pos[1] < 0 or pos[1] > bounds[1]-1: 
     return True 
    else: 
     return False 

문제 반영 일부 입출력이다 :

여기서 문제가되는 코드이다 지금

In [13]: bounds = [10, 10] 

In [14]: p = [9,0] 

In [15]: getAdjacent(p, bounds) 
Out[15]: [[8, 0], [9, -1], [9, 1]] 

In [16]: isOutside([9, -1], bounds) 
Out[16]: True 

In [17]: isOutside([9, 1], bounds) 
Out[17]: False 

왜 [9 -1] 여전히 getAdjacent에() 때 getAdjacent () isOutside()가 True로 다시 실행하도록하는 모든 요소를 ​​제거합니까? 왜 거기에 [10, 0]이 없습니까? 그것은 규모일까요?

답변

8

는 이상 반복하고 나열에서 요소를 제거하지 마십시오 :

for p in posibles: 
    if isOutside(p,bounds): 
     posibles.remove(p) 

이는 건너 뛴 항목에서 반복과 결과를 혼동한다. 나는 이걸 쓸거야

possibles = [p for p in possibles if not isOutside(p, bounds)] 
+0

아, 나는 볼 : :). 덕분에 할당 (그리고 맞춤법 교정을위한 너무 감사 :)) – user1003620

관련 문제