여기서는 "여러 값을 담는다"보다 순서가 중요한지, 나중에 바꿀 수 있어야 하는지를 먼저 봅니다.
순서 있는 값을 담고, 끝에 붙이고, 인덱스로 읽고, 중간 값을 바꿀 가능성이 있으면 list가 기본 선택입니다.
숏컷 코드
items = ["apple", "banana"]
items.append("orange")
first = items[0]
items[1] = "kiwi"
for item in items:
print(item)문법
기본형은 빈 리스트, 리터럴, 끝 추가, 위치 조회, 위치 수정, 슬라이싱, 순회까지 같이 보면 됩니다.
items = []
items = ["apple", "banana"]
items.append("orange")
first = items[0]
items[1] = "kiwi"
head = items[:2]
for item in items:
...list는 Python의 기본 가변 시퀀스입니다.
순서와 수정 가능성이 같이 필요한 순간에 가장 먼저 떠올리면 됩니다.
기본 선택
순서 있고 바꿀 수 있는 기본 컬렉션이면 list가 맞다
리스트는 순서를 유지하고, 인덱스로 접근할 수 있고, 항목을 바꿀 수도 있습니다. 그래서 Python에서 가장 자주 쓰는 "기본 컨테이너" 역할을 맡습니다.
numbers = [10, 20, 30]
print(numbers[1]) # 20
numbers[1] = 99
print(numbers) # [10, 99, 30]처음 설계할 때 자료구조가 아직 확실하지 않더라도, 순차 처리와 수정 가능성이 있다면 list부터 시작하는 경우가 많습니다.
끝 작업
끝에 붙이고 끝에서 꺼내는 패턴에 강하다
list는 동적 배열처럼 동작하므로 끝에 append()하고 끝에서 pop()하는 패턴이 자연스럽습니다.
즉 "스택처럼 쌓는다"는 감각에는 잘 맞습니다.
stack = []
stack.append("a")
stack.append("b")
last = stack.pop() # "b"반면 맨 앞에 자주 넣거나 빼면 뒤쪽 원소들을 밀어야 해서 비용이 커집니다.
앞쪽 작업이 많아지면 list보다 collections.deque가 먼저 떠올라야 합니다.
수정과 비교
중간 수정과 순차 처리에 모두 쓸 수 있다
list는 for 순회와 인덱스 수정이 모두 가능해서, "읽고, 일부를 고치고, 다시 처리" 같은 흐름을 만들기 쉽습니다.
prices = [100, 120, 90]
prices[0] = 110
for price in prices:
print(price)이 점 때문에 입문 단계에서 list가 가장 범용적으로 보입니다. 다만 범용적이라는 뜻이 항상 최적이라는 뜻은 아닙니다.
tuple, set, deque와는 연산 패턴으로 갈린다
리스트를 쓸지 헷갈릴 때는 아래처럼 빠르게 비교하면 됩니다.
- 순서가 중요하고 수정도 한다:
list - 중복 제거가 핵심이다:
set - 값 묶음을 고정해 두고 싶다:
tuple - 앞뒤 양쪽 끝에서 자주 넣고 뺀다:
deque
즉 "여러 값을 담는다"만으로는 부족하고, 순서 / 수정 / 접근 방식까지 같이 봐야 합니다.
numbers = [1, 2, 3] # 순서 있고 수정 가능
coords = (1, 2) # 고정된 값 묶음
unique = {"a", "b"} # 중복 제거같은 "컬렉션"이라도 무엇을 자주 하느냐에 따라 기본 선택이 달라집니다.
# 순서대로 담고 나중에 수정
scores = [70, 80, 90]
scores[1] = 85
# 고정 좌표라면 tuple이 더 직접적
point = (10, 20)주의할 점
list가 기본값이긴 하지만, 앞쪽 삽입/삭제가 많은 큐 작업까지 무조건 list로 밀면 금방 어색해집니다.
# ❌ 앞에서 자주 꺼내는 작업을 list로 계속 처리
queue = []
queue.append("a")
queue.append("b")
first = queue.pop(0)
# ✅ 양쪽 끝 작업이 많으면 deque가 더 자연스럽다
from collections import deque
queue = deque(["a", "b"])
first = queue.popleft()# ❌ 중복 제거가 목적이면 list는 불필요하게 같은 값을 계속 담는다
tags = ["python", "python", "async"]
# ✅ 중복 제거 자체가 목적이면 set이 더 직접적이다
tags = {"python", "async"}# ❌ 범위를 벗어난 인덱스는 오류
items = ["a", "b"]
# print(items[2])
# ✅ 길이가 불확실하면 먼저 길이 또는 순회 구조를 사용
for item in items:
print(item)참고 링크
2 sources