Menu

파이썬 리스트: 생성, 인덱싱, 추가, 정렬, 순회하기

파이썬에서 가장 흔한 컬렉션인 리스트의 실전 투어 — 생성, 인덱싱, 슬라이싱, 추가, 정렬, 그리고 가장 많이 쓰게 될 패턴들까지.

이 페이지에는 실행 가능한 에디터가 있습니다 — 편집하고 실행하면 결과를 바로 볼 수 있습니다.

리스트는 순서 있고 변경 가능한 시퀀스예요

리스트는 파이썬에서 단연 가장 많이 쓰이는 컬렉션 타입이에요. 순서가 있고 바뀔 수 있는 값들의 집합 — 추가, 삭제, 정렬, 갱신 — 을 다룬다면 거의 언제나 리스트가 정답이에요.

대괄호로 만듭니다:

리스트에는 뭐든, 심지어 다른 리스트도 담을 수 있어요. 실무에서는 대부분 한 가지 종류만 담게 돼요 — 사용자 리스트, 숫자 리스트, 이런 식으로요. 그게 가장 다루기 쉽거든요.

인덱싱

각 아이템은 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 지연 순회.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기