파이썬 리스트 돌면서 현재 값 삭제(remove)

파이썬으로 알고리즘 문제를 풀다보면 리스트를 돌면서 현재 값을 삭제해줘야 할때가 있다.

 

그럴때 흔히 아래와 같은 방식의 알고리즘을 떠올린다.

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

for i in temp:
	temp.remove(i)

 

하지만 위의 코드는 remove시에 원본 리스트인 temp의 데이터가 훼손되기 때문에 원하는대로 돌아가지 않는다.

 

1. 첫번째 루프에서 0번째 원소인 1을 지우고 temp=[2,3,4,5] 가 된다.

2. 두번째 루프에서 1번째 원소를 가져오는데 이 값이 3이 되어버린다.

     => 2를 건너뛰어 버린다.

 

위의 상황을 방지하기 위해 다음과 같은 방법을 사용한다.

 

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

for i in temp[:]:
	temp.remove(i)

 

temp[:] 를 이용해 temp의 복사본을 for 루프에 넣고 돌리는 방식이다.