파이썬으로 알고리즘 문제를 풀다보면 리스트를 돌면서 현재 값을 삭제해줘야 할때가 있다.
그럴때 흔히 아래와 같은 방식의 알고리즘을 떠올린다.
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 루프에 넣고 돌리는 방식이다.