List, 너 누구냐!

장수혁·2021년 9월 24일
0

1. 리스트의 주요 연산 시간 복잡도

len(a) = O(1) (맨 마지막 인덱스만 보면 됨)
a[i] = O(1) (1개 조회)
a.append(elem) = O(1) (다른 인덱스를 건드리지 않음)
a.pop(0) = O(n) (다른 인덱스 모두 하나씩 앞당겨짐) >> 전체 복사 필요 = 큐 연산
cf) 보다 효율적인 연산을 위해 리스트보다는 데크(deque) 권장 >> O(1)에 처리가능
a.pop() = O(1) = 스택연산
del a[i] = O(n) : i에 따라 다르다. 최악의 경우 O(n) (0일경우에는 a.pop(0)이랑 동일)
a.sort() = O(nlogn) : 정렬은 팀소트를 사용하며 최선의 경우에는 O(n)에 사용 ㄱㄴ
min(a),max(a) = O(n) : 전체 선형 탐색 필요

2. 리스트 활용 방법

  • a=[1,2,3,4]

1.insert()

a.insert(3,5)
a
>>[1,2,3,5,4]

2. try 구문

존재하지 않는 인덱스를 조회하면 index error(list index out of range) 발생
그때 try 구문을 사용하여 에러에 대한 예외처리 가능

try:
    print(a[9])
except IndexError:
    print("존재하지 않는 인덱스")

3. 리스트의 특징

  • 요소에 대한 포인터 목록을 가지고 있는 구조체
  • 파이썬은 모든 것이 객체이기 때문에, 리스트는 이들 객체에 대한 포인터 목록을 관리하는 형태로 구현됨.
  • 서로 다른 자료형이 하나의 리스트 안에 들어갈 수 있음 BUT 인덱스 조회시 모든 포인터의 위치를 찾아갸아해서 속도면에서는 불리
profile
달리기는 못해도 걷기는 할 수 있다

0개의 댓글