일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 분할정복
- 백준
- Chatbot
- 알고리즘
- deque
- Sessions
- QuickSort
- PYTHON
- 데이터파이프라인
- 프로그래머스
- OLTP
- 챗봇
- Cookies
- divide and conquer
- 고득점KIT
- 데이터엔지니어링
- DFS
- 탐색알고리즘
- sql
- queue
- SQL스터디
- Merge sort
- 웹기초
- olap
- 데이터엔지니어
- Data Engineering
- BFS
- 퀵정렬
- 병합정렬
- stack
Archives
- Today
- Total
Trey
Python에서 deque.popleft() 실행 시, iterable error가 뜬다면? 본문
BFS문제들을 풀다보면, x와 y좌표를 큐에 넣고 빼는 경우가 많습니다.
(예: www.acmicpc.net/problem/1926)
물론 상황에 맞게 적용하면 되겠지만,
1) 큐를 생성한 후에 리스트 또는 튜플 자료형으로 큐에 저장하거나
2) 큐를 생성할 때, array안에 array객체를 넣어서 초기화해주어야
나중에 x와 y로 popleft()를 할 때 에러없이 사용 가능합니다.
쉽게 이해할 수 있도록 아래의 예를 들어보겠습니다.
큐를 생성할 때, 리스트로 원소들을 바로 저장할 경우 아래처럼 iterable 에러가 납니다.
# 리스트로 바로 저장했을 경우
q = deque([1,2])
x, y = q.popleft()
# TypeError: 'int' object is not iterable
위처럼 popleft()를 하는 경우 q.popleft() 자체가 이미 1이라는 원소이므로 y에 할당할 값이 없게 되어 에러가 나는 것입니다.
Python document를 찾아보면, 큐를 처음 생성할때 iterable object가 큐의 파라미터로 생성이 됩니다.
q = deque()
# q = deque([])
따라서, popleft를 할 때 x와 y처럼 여러 변수로 한번에 pop하고 싶을 경우 리스트 또는 튜플 자료형으로 큐에 저장이 되도록하면 사용하기 편합니다. 아래는 튜플로 저장했을 경우입니다.
# 튜플로 저장했을 경우
q = deque()
q.append((1, 2))
x, y = q.popleft()
# x = 1, y = 2