Cheat sheet 1 부터 쓰기 시작했는데, 기본 자료 구조 정리를 안해서 이번 편은 0 편이라고 썼습니다.
파이썬 자료 구조 간단 정리 시간을 가져보죠 !
리스트
가장 많이 쓰이는 동적 배열 자료구조는 리스트(list) 죠
- 순서가 있다.
- 리스트는 시퀀스형(sequence type) 으로, 요소의 순서가 유지된다.
- 자유로운 추가(append), 삭제(remove), 검색 가능(in, index)
- append(): 맨 뒤에 요소 추가
- remove(val): 값이 처음 나타나는 항목 제거
- in: 존재 여부 확인
- index(val): 값의 인덱스(위치) 찾기 (단, 값이 없으면 ValueError 발생)
- in은 존재 여부 확인에 유용하지만, 해당 요소가 어디 있는지를 알고 싶다면 .index()를 써야 합니다.
- index()는 해당 값이 없을 경우 ValueError를 일으키므로, 존재 확인 후 사용하는 것이 안전합니다
- ex) if val in my_list: idx = my_list.index(val)
- 다양한 자료형 및 중복 허용
- 정수, 문자열, 리스트 등 어떤 자료형도 요소로 넣을 수 있으며
- 동일한 값이 여러 번 들어가도 된다.
- in 연산자의 용도 이해가 중요하다
- for val in my_list: 반복(iteration)
- val in my_list: 특정 값의 존재 여부 확인
# 생성
my_list = [1, 2, 3, 4, 5]
# 추가
my_list.append(6)
# 추가 (여러개를 리스트로 받아서 끝에)
my_list.extend([6, 7])
# 접근
value = my_list[0] # value 는 1
# 검색 (index)
print(my_list.index(5)) #4
# 삭제
my_list.remove(3) # 값이 3인 요소 삭제
# 개수
size = len(my_list)
# 검색 (in)
print(8 in my_list) # False
# 검색 (in + if 조건)
print([value for value in my_list if value < 3]) # [1,2]
C++ 및 자바에서 봤던 자료구조인 벡터, 스택등을 리스트로 구현해보자
벡터
Python의 list는 이미 벡터와 비슷한 구조입니다. 크기가 자동으로 늘어나고, 임의 접근도 가능해요.
paired 형식이 필요하면 list 안에 tuple을 넣으면 됨
v = []
v.append((1,2))
v.append((3,4))
print(len(v))
# 2
for p in v:
print(p)
#(1,2)
#(3,4)
여기서 잠깐,
요점 비교
항목 | list of tuple | dictionary |
예시 | [(1, "a"), (2, "b")] | {1: "a", 2: "b"} |
순서 | 유지됨 (삽입 순서 기준) | Python 3.7+ 부터는 유지됨 |
중복 키 | 허용됨 (같은 키 여러 개 가능) | 불가능 (키는 유일해야 함) |
키 기반 접근 | 불편 (for x in lst if x[0]==...) | 빠름 (d[1]) |
값 변경 | 튜플이라 변경 불가 (재할당 필요) | 가능 (d[1] = "new") |
정렬 등 조작 | 리스트처럼 정렬, 슬라이싱 가능 | 키/값 단위 조작 위주 |
어떤 상황에 무엇을 써야 할까?
list of tuple이 적합한 경우:
- 중복 키 허용해야 함
- 정렬이 중요함 (예: 점수순 정렬 등)
- 순차 처리가 많음 (e.g., for 루프에서 첫 값, 두 번째 값 등)
dict가 적합한 경우:
- 키가 유일해야 함
- 키로 빠르게 값을 찾고 싶을 때 (O(1) 접근)
- 값을 자주 갱신하거나 접근할 일이 많을 때
스택
그냥 리스트로 구현 후, 접근시 my_list[-1], 삭제시 my_list.pop(-1) 으로 빼면 됩니다.
(참고로 python 에서 음수 인덱스는 리스트나 문자열에서 역순으로 접근을 가능하게 하는 방법입니다.)
s = []
s.append(1)
s.append(2)
s.append(3)
print(len(s))
# 3
while len(s) > 0 :
print(s[-1])
s.pop(-1)
# 3
# 2
# 1
큐
deque
thread safe 한 Queue 보다 빠름. 앞, 뒤로 넣고 빼고 다 됨
메서드 | 설명 | 예시 |
append(x) | 오른쪽에 추가 | dq.append(1) |
appendleft(x) | 왼쪽에 추가 | dq.appendleft(2) |
pop() | 오른쪽에서 꺼냄 | dq.pop() |
popleft() | 왼쪽에서 꺼냄 | dq.popleft() |
from collections import deque
q = deque()
q.append(1)
q.appendleft(2)
q.pop()
q.popleft()
heapq
우선순위 큐를 써야할 땐? - heapq 를 쓰면 되죠
import heapq
pq = [1,2,8]
heapq.heappush(pq, 6)
while pq:
print(heapq.heappop(pq))
# 1
# 2
# 6
# 8
위와 같이 파이썬의 heapq 는 기본이 최소 힙(min heap) 이므로, 최대 힙은 아래와 같이 편법으로 사용 가능하다.
from heapq import heappush, heappop
import heapq
nums = [1,2,6,8]
### 방법 1
heap = []
for num in nums:
heappush(heap, (-num, num)) # (우선순위, 값) pair 값을 넣더라도 앞자리부터 소팅해주는 점을 이용한 것
while heap:
print(heappop(heap)[1])
# 8
# 6
# 2
# 1
### 방법 2
max_heap = [-num for num in nums]
heapq.heapify(max_heap)
while max_heap:
print(-heappop(max_heap))
# 8
# 6
# 2
# 1
맵
C++ 에서 키, 값으로 이루어진 맵 구조는 위에서 잠깐 나왔던 dict 로 구현할 수 있다
단, 해시기반이라 immutable 한 객체면 (int 같은 값. 그리고 tuple 은 됨) 키로 쓸 수 있다
- 선언은 {} 나 dict() 로 가능
- 추가 my_dict["키"] = value, 읽기 my_dict["키"] 으로 가능
- 순서는 보장하지 않는다고 생각하자
- for key in my_dict 하면 키카 튀어나옴
- for val in my_dict.values() 하면 값이 튀어나옴
- for k, v in my_dict.items() 하면 둘 다 튀어나옴
- 'key' in my_dict : 유무 True/False
- 삭제 del my_dict['key']
# 딕셔너리 예시
my_dict = {'a': 1, 'b': 2, 'c': 3}
# 1. for key in my_dict → 키만 순회
for key in my_dict:
print(key) # 'a', 'b', 'c'
# 2. for val in my_dict.values() → 값만 순회
for val in my_dict.values():
print(val) # 1, 2, 3
# 3. for k, v in my_dict.items() → 키와 값 쌍 순회
for k, v in my_dict.items():
print(k, v) # ('a', 1), ('b', 2), ...
# 4. 'key' in my_dict → 키 존재 여부 확인
print('a' in my_dict) # True
print('z' in my_dict) # False
# 5. del my_dict['key'] → 키-값 쌍 삭제
del my_dict['a'] # 'a': 1 항목이 삭제됨
파이썬 딕셔너리, 제대로 알자. 해시 구조부터 실전 까지
📌 1. 딕셔너리는 왜 중요한가?파이썬에서 딕셔너리는 데이터를 "이름표 붙여서" 저장할 수 있는 구조입니다.student = {'name': 'Alice', 'age': 20}print(student['name']) # Alice 많은 프로그래밍 문제가 “값을
ohollama.tistory.com
set 도 중요하니 별도의 글에서 다뤄볼까요?
https://ohollama.tistory.com/103
[코테] set
Set(집합)은 Hash Table 기반의 중복 없는 원소 모음입니다. 특성 설명중복 불허같은 값은 한 번만 존재함순서 없음리스트처럼 인덱싱 X (2023 이후도 삽입 순서 보장되긴 함, 하지만 여전히 "순서 없
ohollama.tistory.com

'IT > 알고리즘 코딩' 카테고리의 다른 글
알고리즘 코딩 테스트, 최근에는 어떻게 바뀌고 있을까? (1) | 2025.05.20 |
---|---|
Python 변수의 Scope와 Mutable vs. Immutable 데이터 타입 (0) | 2023.10.14 |
[코테] 알고리즘 공부 Cheat sheet - III (DP) (0) | 2023.04.17 |
[코테] 알고리즘 공부 Cheat sheet - II (search) (0) | 2023.04.16 |
[코테] 사용언어가 파이썬이라서 알아야 하는 것 (0) | 2023.04.16 |