파이썬 리스트(List) 완벽 정리: 추가, 삭제, 슬라이싱, 중복 제거 한 번에 커버 이미지
개발자

파이썬 리스트(List) 완벽 정리: 추가, 삭제, 슬라이싱, 중복 제거 한 번에

파이썬 리스트(list) 사용법 총정리. 요소 추가(append/insert/extend), 삭제(remove/pop/del), 중복 제거, 슬라이싱, 복사까지 복붙해서 바로 쓰는 예제로 정리했습니다.

코딩하는 상인·· 읽기 6출처 없음

파이썬에서 가장 많이 쓰는 자료형은 단연 리스트입니다. 그만큼 검색도 많죠. "파이썬 리스트 추가", "리스트 요소 삭제", "리스트 중복 제거", "리스트 슬라이싱"… 매번 비슷한 걸 찾게 됩니다.

이 글은 파이썬 리스트의 핵심 사용법을 한 곳에 모았습니다. 추가·삭제·탐색·정렬·슬라이싱까지, 전부 복사해서 바로 쓸 수 있게 정리했습니다. 북마크해두고 필요할 때마다 꺼내 쓰세요.

동작 환경: Python 3.x (표준 문법, 별도 설치 불필요)


리스트 생성과 기본

arr = [1, 2, 3]            # 기본 생성
arr = []                   # 빈 리스트
arr = [0] * 5              # [0, 0, 0, 0, 0]
arr = list(range(5))       # [0, 1, 2, 3, 4]
arr = list("abc")          # ['a', 'b', 'c']

len(arr)                   # 길이
arr[0]                     # 첫 번째 (인덱스 0)
arr[-1]                    # 마지막

요소 추가 (append, insert, extend)

세 가지를 헷갈리기 쉬운데, 용도가 다릅니다.

arr = [1, 2, 3]

arr.append(4)              # 맨 뒤에 하나 추가 → [1, 2, 3, 4]
arr.insert(1, 10)          # 인덱스 1 위치에 삽입 → [1, 10, 2, 3, 4]
arr.extend([5, 6])         # 리스트를 펼쳐서 이어붙임 → [..., 5, 6]

# append vs extend 차이 주의!
a = [1, 2]
a.append([3, 4])           # [1, 2, [3, 4]]  ← 리스트 자체가 원소로
b = [1, 2]
b.extend([3, 4])           # [1, 2, 3, 4]     ← 원소들이 펼쳐짐

# + 연산자로 합치기 (새 리스트 생성)
merged = [1, 2] + [3, 4]   # [1, 2, 3, 4]

요소 삭제 (remove, pop, del, clear)

arr = [1, 2, 3, 2, 4]

arr.remove(2)              # 값 2를 찾아 첫 번째만 삭제 → [1, 3, 2, 4]
arr.pop()                  # 마지막 요소 삭제하고 반환 → 4 반환
arr.pop(0)                 # 인덱스 0 요소 삭제하고 반환
del arr[1]                 # 인덱스 1 요소 삭제
del arr[1:3]               # 슬라이스 범위 삭제
arr.clear()                # 전체 비우기 → []

# 조건에 맞는 요소만 남기기 (필터링)
arr = [1, 2, 3, 4, 5]
arr = [x for x in arr if x % 2 == 0]   # 짝수만 → [2, 4]

remove()으로, pop()del인덱스로 삭제한다는 점을 기억하세요.


중복 제거

검색량이 매우 높은 패턴입니다.

arr = [3, 1, 2, 3, 1]

# 순서 상관없을 때
unique = list(set(arr))            # [1, 2, 3] (순서 보장 안 됨)

# 순서 유지하며 중복 제거 (Python 3.7+)
unique = list(dict.fromkeys(arr))  # [3, 1, 2]

탐색 (in, index, count)

arr = [1, 2, 3, 2, 1]

2 in arr                   # True — 포함 여부
arr.index(2)               # 1 — 첫 번째 2의 인덱스
arr.count(2)               # 2 — 2의 개수

# 값이 없을 때 index()는 에러 → 미리 확인
if 5 in arr:
    print(arr.index(5))

# 조건을 만족하는 첫 인덱스
next((i for i, x in enumerate(arr) if x > 2), -1)   # 없으면 -1

슬라이싱 (자르기)

arr = [0, 1, 2, 3, 4, 5]

arr[1:4]       # [1, 2, 3]    인덱스 1~3
arr[:3]        # [0, 1, 2]    처음부터 3개
arr[3:]        # [3, 4, 5]    인덱스 3부터 끝까지
arr[-2:]       # [4, 5]       마지막 2개
arr[::2]       # [0, 2, 4]    2칸씩 (짝수 인덱스)
arr[::-1]      # [5, 4, 3, 2, 1, 0]   뒤집기
arr[:]         # 전체 복사 (얕은 복사)

정렬과 뒤집기

arr = [3, 1, 2]

arr.sort()                 # 제자리 오름차순 정렬 → [1, 2, 3]
arr.sort(reverse=True)     # 제자리 내림차순
sorted(arr)                # 원본 유지, 새 리스트 반환
arr.reverse()              # 순서 뒤집기 (정렬 아님)

정렬 기준 지정, 다중 정렬 등 더 자세한 내용은 [파이썬 정렬 완벽 정리] 글을 참고하세요.


리스트 컴프리헨션 (한 줄로 만들기)

# 제곱 리스트
squares = [x ** 2 for x in range(5)]        # [0, 1, 4, 9, 16]

# 조건 필터링
evens = [x for x in range(10) if x % 2 == 0]

# 조건부 값
labels = ["짝" if x % 2 == 0 else "홀" for x in range(5)]

# 2차원 리스트 초기화 (중요!)
grid = [[0] * 3 for _ in range(3)]          # 올바른 방법
# grid = [[0] * 3] * 3   ← ❌ 모든 행이 같은 리스트를 참조하는 버그

자주 쓰는 유틸 함수

arr = [3, 1, 4, 1, 5]

sum(arr)               # 14 — 합
max(arr)               # 5 — 최댓값
min(arr)               # 1 — 최솟값
len(arr)               # 5 — 길이

# 인덱스와 값 동시에 순회
for i, val in enumerate(arr):
    print(i, val)

# 여러 리스트 동시에 순회
for a, b in zip([1, 2], ['x', 'y']):
    print(a, b)

# 리스트를 문자열로 합치기
"-".join(["a", "b", "c"])           # 'a-b-c'
"-".join(map(str, [1, 2, 3]))       # '1-2-3' (숫자는 str 변환 필요)

리스트 복사 (얕은 복사 vs 깊은 복사)

자주 하는 실수 중 하나입니다. 단순 대입은 복사가 아니라 같은 리스트를 가리킵니다.

a = [1, 2, 3]
b = a                  # ❌ 복사 아님! 같은 리스트를 가리킴
b.append(4)
print(a)               # [1, 2, 3, 4]  ← a도 바뀜

# 올바른 복사 방법
b = a.copy()           # 또는 a[:], list(a)

# 2차원 리스트는 깊은 복사 필요
import copy
b = copy.deepcopy(a)   # 중첩된 리스트까지 완전히 복사

자주 묻는 질문

Q. append와 extend의 차이는? append는 인자 하나를 통째로 마지막 원소로 추가하고, extend는 인자(반복 가능 객체)의 각 원소를 펼쳐서 이어붙입니다. 리스트를 통째로 넣고 싶으면 append, 합치고 싶으면 extend를 쓰세요.

Q. 리스트에서 특정 값을 모두 삭제하려면? remove()는 하나만 지우므로, 모두 지우려면 컴프리헨션으로 필터링하세요. arr = [x for x in arr if x != 삭제값]

Q. 리스트와 튜플의 차이는? 리스트는 수정 가능(mutable), 튜플은 수정 불가(immutable)입니다. 변경할 일이 없는 데이터나 딕셔너리 키로 쓸 값은 튜플이 적합합니다.


마무리

파이썬 리스트의 핵심은 추가는 append/insert/extend, 삭제는 remove(값)/pop(인덱스), 잘라내기는 슬라이싱입니다. 그리고 가장 자주 실수하는 두 가지 — b = a는 복사가 아니라는 점과, 2차원 리스트는 [[0]*n for _ in range(m)]로 초기화해야 한다는 점만 기억하면 대부분의 함정을 피할 수 있습니다.

이 패턴들을 손에 익히면 리스트를 다루는 코드가 훨씬 짧고 안전해집니다. 필요할 때마다 이 글을 다시 펼쳐 해당 섹션을 복사해 쓰세요.

리스트와 함께 자주 쓰는 정렬은 [파이썬 정렬 완벽 정리] 글에서 더 깊이 다룹니다.

함께 보면 좋은 글