본문 바로가기
[R&D] 프로그래밍/Python

[Python] 리스트(list)를 Stack, Queue 처럼 사용하기 - pop

by Geuni 2022. 7. 5. 10:50
728x90
반응형

리스트 메소드 중에 pop()은 Stack이나 Queue에서처럼 데이터를 가져오면서 삭제가 되는 기능을 합니다.

이를 이용해 Stack/Queue 처럼 활용할 수 있습니다.

 

Stack과 Queue는 아래의 포스팅을 참고해 주세요.

https://geuninote.tistory.com/70

 

스택 (Stack), 큐 (Queue) 개념 정리

1. Stack 스택 (Stack)은 기본적으로 후입선출 (LIFO, Last In First Out)의 구조로 되어있습니다. 그림과 같이 한 쪽 끝에서만 데이터 교환이 이뤄지기 때문에 데이터를 꺼내갈 때 가장 마지막에 넣은 값이

geuninote.tistory.com


1. pop()

pop()은 기본적으로 인자 없이 사용할 경우 가장 최근의 데이터를 꺼내옵니다.

필요한 경우 pop(n) 형태로 리스트의 특정 인덱스에 접근하여 데이터를 가져오는 게 가능합니다.

testList = [0, 1, 2, 3, 4, 5, 6, 7]

pop1 = testList.pop()
print(pop1, ' / ', testList) # 7  /  [0, 1, 2, 3, 4, 5, 6]

pop2 = testList.pop(3)
print(pop2, ' / ', testList) # 3  /  [0, 1, 2, 4, 5, 6]

pop3 = testList.pop(0)
print(pop3, ' / ', testList) # 0  /  [1, 2, 4, 5, 6]

2. Stack, Queue 만들기

개념적으로 봤을 때 스택과 큐는 데이터를 꺼내가는 위치만 다르다고 할 수 있습니다.

그렇기 때문에 append()로 데이터를 추가하고 pop()으로 꺼내는 방식으로 리스트를 사용하면

스택과 큐로 사용할 수 있습니다.

간단하게 그림으로 나타내면 위와 같습니다.

append() : 데이터 추가

pop() : 가장 마지막 데이터를 꺼냄

pop(0) : 가장 오래된(0번째) 데이터를 꺼냄

 

이를 함수화하여 코드로 간단하게 구현하면 아래와 같습니다.

# Stack
def dataPop(stack:list):
    try:
        data = stack.pop()
    except:
        data = None
    return data

def dataPush(stack:list, data):
    stack.append(data)

# Queue
def dataDequeue(queue:list):
    try:
        data = queue.pop(0)
    except:
        data = None
    return data

def dataEnqueue(queue:list, data):
    queue.append(data)


# Stack Example
stackList = [0, 1, 2, 3, 4]

stackData = dataPop(stackList)
dataPush(stackList, 'new stack data')

print(stackData, ' / ', stackList) # 4  /  [0, 1, 2, 3, 'new stack data']

# Queue Example
queueList = [0, 1, 2, 3, 4]

queueData = dataDequeue(queueList)
dataEnqueue(queueList, 'new queue data')

print(queueData, ' / ', queueList) # 0  /  [1, 2, 3, 4, 'new queue data']

pop() 할 때 리스트에 데이터가 없으면 IndexError가 발생합니다.

그래서 pop할 때는 try, except로 예외 처리를 해주어야 합니다.

 

위 예제는 아주 기초적인 내용만 담았기 때문에 개인의 코딩 스타일에 맞게 구체화해가면 될 것 같습니다.

728x90
반응형

댓글