반응형
prog = collections.deque([5,4,3,2,1])
answer = []
while len(prog) > 0 :
tmp = prog.pop(0)
cnt = 1
for i in prog :
if tmp < i :
break
prog.pop(0)
cnt += 1
answer.append(cnt)
프로그래머스 문제를 풀다가 RuntimeError: deque mutated during iteration. 오류가 나왔다.
이 오류는 collections.defaultdict()을 사용하다 보면 나오는 오류와 비슷하게 생겼다.
RuntimeError: dictionary changed size during iteration
오류가 뜨는 이유는 deque가 반복문을 돌릴 때 deque의 내용이 변질되거나 사이즈가 변경될 때 뜨는 오류다.
prog = collections.deque([5,4,3,2,1])
answer = []
while len(prog) > 0 :
tmp = prog.pop(0)
cnt = 1
for i in prog :
if tmp < i :
break
prog.pop(0)
cnt += 1
answer.append(cnt)
for i in prog :
if tmp < i :
break
prog.pop(0)
cnt += 1
이 부분에서 오류가 나는데, prog의 내용을 반복문을 통해서 돌리지만 prog.pop(0)으로 인해 prog의 내용이 변경되기 때문이다.
이 오류를 해결하기 위해서는 list를 새로 만들거나, copy를 사용한다.
copy는 모듈을 import 하고 사용을 해야 한다.
for i in copy.deepcopy(prog) :
if tmp < i :
break
prog.popleft()
cnt += 1
이런 식으로 deepcopy 또는 copy를 사용하여 반복문을 돌리면 해결 가능하다.
for i in list(prog) :
if tmp < i :
break
prog.popleft()
cnt += 1
li = prog[:]
for i in li :
if tmp < i :
break
prog.pop(0)
cnt += 1
이렇게 list를 복사해서 사용해도 된다. *밑의 방법의 경우에는 prog가 deque가 아닌 list 형태다.
반응형
'Language_ > python' 카테고리의 다른 글
[Python] abs(절대값) 함수 정리 (0) | 2021.08.06 |
---|---|
[Python] 진법 변환 총 정리?! (8) | 2020.12.20 |
[python] Heapq 힙 모듈?! (heapq의 사용법) (0) | 2020.08.14 |
[python] startswith() 사용방법 정리 @.@ (3) | 2020.08.13 |
[python] List to Dict (리스트를 딕셔너리로 변환) 총 정리!! (5) | 2020.08.13 |
댓글