Python list.pop(0)

Suhyeon Lee·2024년 10월 16일
1

팰린드롬 문제

  • 팰린드롬(Palindrome): 앞뒤를 뒤집어도 똑같은 문자열
  • 팰린드롬 문제를 만나면 보통은 list의 0번 인덱스와 마지막 인덱스를 서로 비교해서 같은지 확인하는 방식으로 푸는데 이때 한 가지 생각해봐야 할 부분이 있음

list.pop(0)의 시간복잡도는 O(n)

  • list의 pop() 연산
    • 리스트의 pop() 함수는 가장 마지막에 있는 요소를 리턴 후 해당 요소를 삭제해 마치 queue처럼 쓸 수 있음
      • i번째 요소라면 list.pop(i)라고 하여 i번째요소를 찾아서 pop
      • list.pop(0) → 리스트의 0번째 요소를 pop
  • 하지만 리스트의 가장 첫번 째 요소를 반환하고 삭제하는 pop(0)는 O(n)의 시간 복잡도를 가짐
  • 즉 데이터의 크기가 커지면 커질수록 선형 시간에 비례해 실행 시간이 증가

pop(0)를 하면 1번 인덱스부터 모두 다 앞으로 하나씩 당겨야하기 때문에 O(n)의 시간이 소요된다.

데크(deque) 자료구조: from collections

  • 큐의 선입선출(FIFO) 방식으로 작동
  • 한쪽에서만 push, pop이 일어나던 queue와 달리 양쪽에서 요소를 push, pop 할 수 있음
  • 데크는 push, pop 연산이 자주 일어나는 연산에서 리스트보다 훨씬 우월한 연산 속도를 가짐 → 파이썬은 데크 자료구조도 지원하므로 해당

참고: 파이썬의 list.pop(0)을 쓰면 안 되나요?

profile
2 B R 0 2 B

0개의 댓글