자주 쓰는 자료형들 정리

1.
x in List / x not in List -> O(N) 

2.
x in Set / x not in Set -> O(1)

3.
x in Dict -> O(1)

4. d.keys() 와 d 그리고 list 비교

if x in d -> O(1)
if x in d.keys() -> O(1) -> 왜? d.keys()는 list가 아니다, type을 찍어보면 <class 'dict_keys'> 임을 알 수 있다.
if x in list -> O(N)

 

 

1. Lists
1 Index l[i] O(1) 인덱스로 값 찾기
2 Store l[i] = 0 O(1) 인덱스로 데이터 저장
3 Length len(l) O(1) 리스트 길이
4 Append l.append(5) O(1) 리스드 뒤에 데이터 저장
5 Pop l.pop() O(1) 가장 뒤의 데이터 pop
6 Clear l.clear() O(1) l = []
7 Slice l[a:b] O(b-a) 슬라이싱되는 요소들 수 만큼 비례
8 Extend l.extend(...) O(len(...)) 확장되는 길이만큼
9 Construction list(...) O(len(...)) 리스트 길이만큼
10 check ==, != l1 == l2 O(N) 전체 리스트가 동일한지 확인
11 Insert l[a:b] = ... O(N) 데이터 삽입
12 Delete del l[i] O(N) 데이터 삭제
13 Containment x in/not in l O(N) 포함 여부 확인
14 Copy l.copy() O(N) 복제
15 Remove l.remove(...) O(N) 제거
16 Pop l.pop(i) O(N) 제거된 값 이후를 전부 한칸씩 당겨줘야함
17 Extreme value min(l)/max(l) O(N) 전체 데이터를 확인해야함
18 Reverse l.reverse() O(N) 뒤집기
19 Iteration for v in l: O(N) 전체 데이터 확인하므로
20 Sort l.sort() O(N Log N) 파이썬 기본 정렬 알고리즘
21 Multiply k*l O(k N) 리스트의 곱은 리스트 개수 늘어남

 

2. Sets
1 Add s.add(5) O(1) 집합 요소 추가
2 Containment x in/not in s O(1) 포함 여부 확인
3 Remove s.remove(..) O(1) 요소 제거
4 Discard s.discard(..) O(1) 특정 요소 제거
5 Pop s.pop() O(1) 랜덤하게 하나 pop
6 Clear s.clear() O(1) similar to s = set()
7 Construction set(...) O(len(...)) 길이만큼
8 check ==, != s != t O(len(s)) 전체 요소 동일 여부 확인
9 <=/< s <= t O(len(s)) 부분집합 여부
10 >=/> s >= t O(len(t)) 부분집합 여부
11 Union s, t O(len(s)+len(t)) 합집합
12 Intersection s & t O(len(s)+len(t)) 교집합
13 Difference s - t O(len(s)+len(t)) 차집합
14 Symmetric Diff s ^ t O(len(s)+len(t)) 여집합
15 Iteration for v in s: O(N) 전체 요소 순회
16 Copy s.copy() O(N) 복제

 

3. Dictionaries
1 Store d[k] = v O(1) 데이터 저장
2 Length len(d) O(1) 길이 출력
3 Delete del d[k] O(1) 요소 제거
4 get/setdefault d.get(k) O(1) key에 따른 value 확인
5 Pop d.pop(k) O(1) pop
6 Pop item d.popitem() O(1) 랜덤하게 선택해서 pop
7 Clear d.clear() O(1) similar to s = {} or = dict()
8 View d.keys() O(1) same for d.values() / 키값 전체 확인
9 Construction dict(...) O(len(...)) (key, value) 튜플 개수만큼
10 Iteration for k in d: O(N) 전체 딕셔너리 순회
11 원소 유무 확인 if x in d O(1) x가  d.keys()에 있는지 확인 (True or False)
++ d.keys() if x in d.keys() O(1) type = <class 'dict_keys'>, type이 리스트라면 O(N)

+ Recent posts