python – remove in for (iterator termination)

currentList = [1,2,3,4,5]

for element in currentList
	if element = 3
  		currentList.remove(element)

위와 같은 코드는 실제로 정상적인 의도대로 사용할수 없다
이는 c++ 의 vector 에서의 iterator 로 for문을 loop 도는중 erase 할때와 같은 경우라고 이해할 수 있는데
iterator terrmination 상태가 되어 버린다

다시 말하면 loop 를 도는 근간을 흔들어 버리는 행위를 루프를 도는중에 한다

라고 이해 하면 되지 않을까 싶다

python 의 경우 위의 코드에서

currentList = [1,2,3,4,5]

for element in currentList[:]
	if element = 3
  		currentList.remove(element)

[:]를 붙여주게 되면 실제 loop 를 돌때는 currentList 의 복사본을 이용해 loop 를 돌게 되어 for 루프의 연속성은 유지 하되 내부에서의 컨테이너로의 삽입/삭제는 원본에 영향을 주게 된다


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다