Python deque의 rotate(), popleft() 기능
🧑‍💻 𝗣𝗿𝗼𝗴𝗿𝗮𝗺𝗺𝗶𝗻𝗴/Python

Python deque의 rotate(), popleft() 기능

 

 collection의 deque 

rotate()

우선 deque(덱)은 앞 뒤로 요소를 추가하고 삭제할 수 있는 자료구조 입니다.

큐를 양쪽으로 이어붙인 느낌이라고 생각하시면 됩니다. 약간 손에 앞뒤 이동만 가능한 카드패를 쥐고있다고 생각해보세요.

python으로 deque을 공부하기가 좋습니다.

저는 deque의 연산 중에서 rotate(), popleft() 에 대해서 포스팅하고자 합니다. (잘 까먹어서..)

from collections import deque

우선 deque을 collections 에서 가져옵니다.

collections는 유용한 자료구조를 제공하는 python의 표준 라이브러리입니다.

 

from collections import deque

a = [1, 2, 3, 4, 5]
print(a)

a = deque(a)
print(a)

# 출력
[1, 2, 3, 4, 5]
deque([1, 2, 3, 4, 5])

deque()을 사용하면 리스트가 바로 deque 자료구조 변경됩니다.

 

a = deque([1, 2, 3, 4, 5])
print(a)

a.rotate(1) # 오른쪽으로 이동
print(a)

# 출력
deque([1, 2, 3, 4, 5])
deque([5, 1, 2, 3, 4])

rotate(1) 을 하면 오른쪽으로 이동합니다.

즉슨 제일 뒤에 있던게 제일 앞으로 이동합니다.

 

a = deque([1, 2, 3, 4, 5])
print(a)

a.rotate(1) # 왼쪽으로 이동
print(a)

# 출력
deque([1, 2, 3, 4, 5])
deque([2, 3, 4, 5, 1])

rotate(-1)을 하면 왼쪽으로 이동합니다.

즉 제일 앞에 있던데 제일 뒤로 이동합니다.

 

 

popleft()

python 리스트 자료구조를 보면 pop(i) 이라는 연산이 있습니다.

바로 i번째 인덱스를 삭제하는 연산입니다.

원래 보통의 자료구조에서 pop() 연산이라고 하면 제일 끝에 요소가 삭제가 됩니다.

이를 반대로 한 것이 바로 popleft() 입니다.

popleft()는 제일 끝 요소가 아니라 제일 앞의 요소가 삭제가 됩니다.

a = deque([1, 2, 3, 4, 5])
print(a)

a.popleft()
print(a)

# 출력
deque([1, 2, 3, 4, 5])
deque([2, 3, 4, 5])

이렇게 제일 앞의 값이 삭제가 됩니다.

다른 언어들은 deque() 구현하기가 무척 까다로운데 python은 다 구현되어 있어서 사용하기가 좋습니다.

뭔가 원형의 자료구조를 만들거나 리스트를 돌려야할 때 적용할 수 있습니다.

 

예를 들어 'abbaa' 라는 문자열이 있습니다.

해당 문자열을 원형으로 둘러 연속하는 문자열을 뽑아내고 싶습니다.

그러니까 한번 rotate() 만 하면 bbaaa가 되어 연속하는 문자열 구간 [(0, 1), (2, 4)] 을 뽑아낼 수 있습니다.

from collections import deque

a = deque(list('abbaa'))
print(a)

while True:
    if a[0] == a[-1]:
        a.rotate(-1)
    else:
        break

print(a)

다음과 같이 구현할 수 있습니다.

 

 

 

 

 

 

 

 

python deque rotate deque popleft python 연속되는 문자열 구간


 

728x90