[python] RuntimeError: deque mutated during iteration
오류 상황
프로그래머스의 디스크 컨트롤러를 풀던 도중
programmers.co.kr/learn/courses/30/lessons/42627
deque 반복문을 돌며 pop 하려 할 때 오류가 나왔다.
js = deque(jobs)
for s, t in js:
if s <= time:
js.popleft()
heapq.heappush(heap, (t, s))
오류 원인
파이썬의 deque 같은 경우 자바의 list처럼
deque의 반복문을 돌릴 때내용이 변경되거나 사이즈가 변할 때 나타난다.
해결책 1
deepcopy하여 새로운 객체로 루프를 돌리고 원래 deque의 내용을 변경한다.
import copy
js = deque(jobs)
cnt = 0
for s, t in copy.deepcopy(js):
if s <= time:
js.popleft()
heapq.heappush(heap, (t, s))
해결책 2
루프를 돌며 변경할 부분을 저장해놓은 후 루프가 끝난 후 처리한다.
js = deque(jobs)
cnt = 0
for s, t in js:
if s <= time:
cnt += 1
heapq.heappush(heap, (t, s))
for i in range(cnt):
js.popleft()
cnt로 없앨 부분만큼을 기록한 후 이후에 처리한 모습이다.
'Python' 카테고리의 다른 글
[Python] ModuleNotFoundError: No module named '_lzma' (0) | 2024.06.26 |
---|---|
[Python] 딕셔너리 정렬 및 출력하기 (0) | 2021.05.04 |
itemgetter를 사용해서 다차원 리스트, 튜플 정렬 (0) | 2021.03.16 |
for - else문 (0) | 2021.03.14 |
댓글