Trey

Python에서 deque.popleft() 실행 시, iterable error가 뜬다면? 본문

Python

Python에서 deque.popleft() 실행 시, iterable error가 뜬다면?

Trey Yi 2021. 3. 26. 03:02

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