리스트는 순서 있고 변경 가능한 시퀀스예요
리스트는 파이썬에서 단연 가장 많이 쓰이는 컬렉션 타입이에요. 순서가 있고 바뀔 수 있는 값들의 집합 — 추가, 삭제, 정렬, 갱신 — 을 다룬다면 거의 언제나 리스트가 정답이에요.
대괄호로 만듭니다:
리스트에는 뭐든, 심지어 다른 리스트도 담을 수 있어요. 실무에서는 대부분 한 가지 종류만 담게 돼요 — 사용자 리스트, 숫자 리스트, 이런 식으로요. 그게 가장 다루기 쉽거든요.
인덱싱
각 아이템은 0에서 시작하는 위치를 가져요. 대괄호로 접근합니다:
존재하지 않는 인덱스를 요구하면 IndexError가 발생해요. 범위를 벗어날 가능성이 있다면 먼저 길이를 확인하거나 접근을 try로 감싸세요.
슬라이싱
슬라이싱은 _여러 아이템_을 한 번에 꺼내줍니다. 문법은 문자열과 같아요: list[start:stop:step]:
꼭 기억해 둘 두 가지:
- 슬라이싱은 항상 _새 리스트_를 돌려줘요. 슬라이스를 수정해도 원본엔 영향이 없어요.
- stop 인덱스는 포함되지 않아요 —
nums[2:5]는 인덱스 2, 3, 4를 주지 5는 주지 않습니다.
append, extend, insert로 아이템 추가하기
"리스트에 추가"하는 세 메서드는 서로 다른 일을 해요. 헷갈려 쓰는 게 흔한 버그 원인입니다:
- **
append(x)**는x를 원소 하나로 추가해요 —x가 리스트여도 그래요.items.append([1, 2])는 그 리스트 자체를 하나의 항목으로 넣습니다. - **
extend(iterable)**는 이터러블 안의 각 아이템을 추가해요.items.extend([1, 2])는 두 항목을 추가합니다. - **
insert(i, x)**는 특정 인덱스에 삽입해요.i위치와 그 뒤의 모든 것을 오른쪽으로 한 칸씩 밀어줍니다.
오른쪽에 리스트가 있는 +=는 extend처럼 동작합니다:
그리고 제거하는 쪽:
리스트에 없는 값을 remove()하려고 하면 ValueError가 납니다. "있으면 제거"가 필요하다면 in으로 먼저 확인하거나 try로 감싸세요.
인덱스로 삭제하려면 del도 쓸 수 있어요:
길이, 포함 여부, 개수 세기
in은 리스트가 값을 담고 있는지 확인하는 읽기 좋은 방법이에요. 큰 리스트에 대해 이 질문을 여러 번 해야 한다면, 집합(set)을 쓰세요 — 리스트의 멤버십은 O(n)이지만 집합의 멤버십은 O(1)이에요.
정렬
두 가지 방법이 있고, 선택이 중요해요:
둘 다 내림차순을 위해 reverse=True를 받아요:
그리고 커스텀 순서를 위한 key 함수:
key는 각 아이템에 적용되고, 그 결과를 기준으로 비교해요. 자주 쓰이는 경우: 길이로 정렬, 특정 속성으로 정렬, 문자열의 소문자 형태로 정렬.
뒤집기
필요에 따라 세 가지 방법이 있어요:
원본이 필요 없으면 제자리 방식을, 새 복사본이 필요하면 슬라이싱을, 새 리스트를 만들 필요 없이 역순으로 순회만 하고 싶으면 reversed()를 쓰세요.
공유 참조 함정
리스트는 _가변_이고 변수는 참조예요. 그 말은, 변수 두 개가 같은 리스트를 가리킬 수 있다는 뜻입니다:
b = a는 리스트를 복사한 게 아니라 b를 같은 리스트의 두 번째 이름으로 만든 거예요. 복사본이 필요하면 명시적으로 요청하세요:
이건 모든 파이썬 프로그래머가 적어도 한 번은 물립니다. 기억하세요: 두 리스트 사이의 =은 복사가 아니에요.
반복하면서 만들기
for 반복문 페이지에서 본 기본 패턴을 이미 알고 계실 거예요:
읽기 좋고 언제나 문제 없어요. 익숙해지면 리스트 컴프리헨션이 같은 일을 한 줄로 해줍니다:
컴프리헨션은 두 페이지 뒤에서 자세히 다룰 거예요.
빠른 치트시트
알아둘 만한 메서드 한눈에:
append(x)— 끝에 추가extend(iter)— 이터러블의 각 아이템을 추가insert(i, x)— 인덱스 i에 삽입pop()/pop(i)— 제거 후 반환remove(x)— x의 첫 등장을 제거sort()/sort(key=...)/sort(reverse=True)reverse()index(x)— 첫 x의 위치count(x)— x의 개수copy()— 얕은 복사
다음
리스트는 주력 일꾼이에요. 다음은 튜플을 볼게요 — 리스트의 불변 사촌이죠 — 그리고 리스트 대신 튜플을 꺼내 쓰는 게 더 나은 상황은 언제인지까지.
자주 묻는 질문
파이썬에서 리스트는 어떻게 만드나요?
쉼표로 구분한 값을 대괄호로 감싸세요: fruits = ['apple', 'banana', 'cherry']. 리스트에는 어떤 타입이든 담을 수 있고, 한 리스트 안에 타입을 섞을 수도 있지만 실무에서는 대개 같은 종류만 담는 게 습관이에요.
파이썬에서 리스트는 어떻게 정렬하나요?
리스트에 .sort()를 부르면 원본을 직접 정렬하고, 내장 함수 sorted(list)를 쓰면 원본은 그대로 두고 정렬된 새 리스트를 얻을 수 있어요. 둘 다 내림차순을 위한 reverse=True 플래그와 커스텀 정렬 키를 위한 key= 인자를 받습니다.
파이썬에서 리스트는 어떻게 뒤집나요?
list.reverse()는 원본을 직접 뒤집어요. list[::-1]은 뒤집힌 새 리스트를 돌려주고요. reversed(list)는 반복할 수 있는 이터레이터를 돌려줍니다. 필요에 맞춰 고르세요: 원본 수정 vs 새 복사본 vs 지연 순회.