Menu

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

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

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

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

대괄호로 만듭니다:

main.py
Output
Click Run to see the output here.

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

인덱싱

각 아이템은 0에서 시작하는 위치를 가져요. 대괄호로 접근합니다:

main.py
Output
Click Run to see the output here.

존재하지 않는 인덱스를 요구하면 IndexError가 발생해요. 범위를 벗어날 가능성이 있다면 먼저 길이를 확인하거나 접근을 try로 감싸세요.

슬라이싱

슬라이싱은 _여러 아이템_을 한 번에 꺼내줍니다. 문법은 문자열과 같아요: list[start:stop:step]:

main.py
Output
Click Run to see the output here.

꼭 기억해 둘 두 가지:

  • 슬라이싱은 항상 _새 리스트_를 돌려줘요. 슬라이스를 수정해도 원본엔 영향이 없어요.
  • stop 인덱스는 포함되지 않아요 — nums[2:5]는 인덱스 2, 3, 4를 주지 5는 주지 않습니다.

append, extend, insert로 아이템 추가하기

"리스트에 추가"하는 세 메서드는 서로 다른 일을 해요. 헷갈려 쓰는 게 흔한 버그 원인입니다:

main.py
Output
Click Run to see the output here.
  • **append(x)**는 x를 원소 하나로 추가해요 — x가 리스트여도 그래요. items.append([1, 2])는 그 리스트 자체를 하나의 항목으로 넣습니다.
  • **extend(iterable)**는 이터러블 안의 각 아이템을 추가해요. items.extend([1, 2])는 두 항목을 추가합니다.
  • **insert(i, x)**는 특정 인덱스에 삽입해요. i 위치와 그 뒤의 모든 것을 오른쪽으로 한 칸씩 밀어줍니다.

오른쪽에 리스트가 있는 +=extend처럼 동작합니다:

main.py
Output
Click Run to see the output here.

그리고 제거하는 쪽:

main.py
Output
Click Run to see the output here.

리스트에 없는 값을 remove()하려고 하면 ValueError가 납니다. "있으면 제거"가 필요하다면 in으로 먼저 확인하거나 try로 감싸세요.

인덱스로 삭제하려면 del도 쓸 수 있어요:

main.py
Output
Click Run to see the output here.

길이, 포함 여부, 개수 세기

main.py
Output
Click Run to see the output here.

in은 리스트가 값을 담고 있는지 확인하는 읽기 좋은 방법이에요. 큰 리스트에 대해 이 질문을 여러 번 해야 한다면, 집합(set)을 쓰세요 — 리스트의 멤버십은 O(n)이지만 집합의 멤버십은 O(1)이에요.

정렬

두 가지 방법이 있고, 선택이 중요해요:

main.py
Output
Click Run to see the output here.

둘 다 내림차순을 위해 reverse=True를 받아요:

main.py
Output
Click Run to see the output here.

그리고 커스텀 순서를 위한 key 함수:

main.py
Output
Click Run to see the output here.

key는 각 아이템에 적용되고, 그 결과를 기준으로 비교해요. 자주 쓰이는 경우: 길이로 정렬, 특정 속성으로 정렬, 문자열의 소문자 형태로 정렬.

뒤집기

필요에 따라 세 가지 방법이 있어요:

main.py
Output
Click Run to see the output here.

원본이 필요 없으면 제자리 방식을, 새 복사본이 필요하면 슬라이싱을, 새 리스트를 만들 필요 없이 역순으로 순회만 하고 싶으면 reversed()를 쓰세요.

공유 참조 함정

리스트는 _가변_이고 변수는 참조예요. 그 말은, 변수 두 개가 같은 리스트를 가리킬 수 있다는 뜻입니다:

main.py
Output
Click Run to see the output here.

b = a는 리스트를 복사한 게 아니라 b를 같은 리스트의 두 번째 이름으로 만든 거예요. 복사본이 필요하면 명시적으로 요청하세요:

main.py
Output
Click Run to see the output here.

이건 모든 파이썬 프로그래머가 적어도 한 번은 물립니다. 기억하세요: 두 리스트 사이의 =은 복사가 아니에요.

반복하면서 만들기

for 반복문 페이지에서 본 기본 패턴을 이미 알고 계실 거예요:

main.py
Output
Click Run to see the output here.

읽기 좋고 언제나 문제 없어요. 익숙해지면 리스트 컴프리헨션이 같은 일을 한 줄로 해줍니다:

main.py
Output
Click Run to see the output here.

컴프리헨션은 두 페이지 뒤에서 자세히 다룰 거예요.

빠른 치트시트

알아둘 만한 메서드 한눈에:

  • 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로 코딩 배우기

시작하기