파이썬 리스트 append 함수와 extend 함수
파이썬 리스트 append와 extend: 무엇이고 언제 필요한가?
파이썬에서 여러 값을 저장하고 관리하려면 리스트가 자주 쓰입니다. 리스트에 값을 추가하는 대표적인 방법이 append()와 extend()인데, 두 메서드는 이름이 비슷해 초보자가 혼동하기 쉽습니다. 이 글에서는 각각 무엇을 하는지, 언제 어떤 상황에서 써야 하는지, 쓰임새와 차이를 실제 예제로 확실히 구분해 설명합니다.
이 글을 이해하려면 리스트 자료형과 기본 메서드 사용법을 알고 있으면 좋지만, 리스트 개념이 익숙하지 않아도 예시를 따라가며 배울 수 있습니다.
append와 extend의 공통점과 핵심 차이
- 둘 다 리스트에 새로운 값을 추가하는 메서드입니다.
append(x)는 x 전체를 하나의 요소로 리스트 맨 뒤에 넣습니다.extend(iterable)은 iterable(반복 가능한 값)의 각 요소를 하나씩 리스트 맨 뒤에 차례로 넣습니다.
즉, append는 리스트에 무언가를 통째로 추가하고, extend는 여러 값을 각각 풀어서 이어 붙입니다.
각 메서드의 가장 작은 실행 예제
append의 기본 사용 예
값 하나(숫자, 문자열, 리스트 등)를 통째로 리스트에 추가합니다.
fruits = ["apple", "banana"]
fruits.append("cherry")
print(fruits)실행 결과
['apple', 'banana', 'cherry']
extend의 기본 사용 예
여러 값을 담은 리스트를 각각 풀어서 추가합니다.
numbers = [1, 2, 3]
numbers.extend([4, 5])
print(numbers)실행 결과
[1, 2, 3, 4, 5]
동일한 시작 데이터로 직접 비교하기
같은 리스트에 [4, 5]를 append와 extend로 각각 추가하면 결과가 어떻게 달라질까요?
append로 [4, 5] 추가
a = [1, 2, 3]
a.append([4, 5])
print(a)실행 결과
[1, 2, 3, [4, 5]]
extend로 [4, 5] 추가
b = [1, 2, 3]
b.extend([4, 5])
print(b)실행 결과
[1, 2, 3, 4, 5]
append는 [4, 5] 전체를 한 칸에, extend는 4와 5를 각각 한 칸씩 추가합니다.
실행 결과와 값이 달라지는 이유
| 방법 | 코드 | 리스트 결과 |
|---|---|---|
| append | a.append([4, 5]) | [1, 2, 3, [4, 5]] |
| extend | b.extend([4, 5]) | [1, 2, 3, 4, 5] |
append는 인자로 받은 값을 그대로 넣어서, 리스트 안에 또 다른 리스트가 생깁니다.
extend는 인자로 받은 리스트의 각 요소를 풀어서 기존 리스트에 넣습니다.
많이 하는 실수와 수정 방법
여러 값을 한꺼번에 추가하고 싶을 때 append를 써서 원하는 결과가 안 나올 때가 많습니다.
잘못된 예:
nums = [10, 20]
nums.append(30, 40)
위 코드는 TypeError가 발생합니다. append는 하나의 값만 받을 수 있기 때문입니다.
수정된 정상 코드:
nums = [10, 20]
nums.extend([30, 40])
print(nums)실행 결과
[10, 20, 30, 40]
또 한 가지 혼동 예시:
잘못된 예:
lst = [1, 2]
lst.append([3, 4])
print(lst)실행 결과
[1, 2, [3, 4]]
이 경우 오류는 아니지만, 원하던 [1, 2, 3, 4]가 아니라 [1, 2, [3, 4]]가 됩니다. 요소가 리스트로 들어간 것이죠.
수정하려면 extend를 사용해야 합니다.
lst = [1, 2]
lst.extend([3, 4])
print(lst)실행 결과
[1, 2, 3, 4]
경계값과 예상 밖 동작 확인: 문자열을 추가할 때
extend에 문자열을 넣으면 각 글자가 따로따로 추가됩니다. 초보자는 이 점을 자주 실수합니다.
letters = ["a", "b"]
letters.extend("cd")
print(letters)실행 결과
['a', 'b', 'c', 'd']
위 코드는 ["a", "b", "c", "d"]가 됩니다. "cd" 전체가 아니라, 한 글자씩 풀어서 추가된 결과죠.
만약 "cd"라는 문자열을 통째로 하나로 넣고 싶다면 append를 사용해야 합니다.
letters = ["a", "b"]
letters.append("cd")
print(letters)실행 결과
['a', 'b', 'cd']
현실적인 사용 사례: 여러 값을 반복해서 추가할 때
예를 들어, 센서에서 여러 개의 측정값이 한 번에 리스트로 들어오면, 기존 데이터 리스트에 각 측정값을 하나씩 추가하려면 extend를 써야 합니다.
measurements = [100, 200]
new_data = [300, 400, 500]
measurements.extend(new_data)
print(measurements)실행 결과
[100, 200, 300, 400, 500]
만약, 한 번의 측정값이 리스트 형태로 들어오지만, 그걸 묶어서 각각 보관해야 할 때는 append를 사용하면 됩니다.
records = []
measure = [1.2, 3.4]
records.append(measure)
print(records)실행 결과
[[1.2, 3.4]]
선택 기준: 언제 append, 언제 extend를 써야 할까?
- 값을 하나만 추가할 때는
append(X)를 사용합니다. X는 어떤 자료형도 가능합니다. - 여러 값을 각각 추가할 때는
extend(리스트나 반복 가능한 값)을 사용합니다. - 문자열처럼 각 글자가 분리될 수 있는 값을 extend로 넣을 때는 의도와 다른 결과가 될 수 있으니 주의하세요.
핵심 정리
- append는 한 번에 하나의 값을 통째로 추가합니다.
- extend는 여러 값을 하나씩 풀어서 추가합니다.
- 여러 값을 한꺼번에 리스트에 넣으려면 extend, 값 자체를 묶어 추가하려면 append를 씁니다.
- 문자열이나 리스트 등 반복 가능한 자료형을 다룰 때 결과를 꼭 확인하세요.
연습 문제
- 리스트
nums = [5, 6]에 7과 8을 각각 추가해서[5, 6, 7, 8]로 만드는 코드를 작성하세요. - 리스트
items = []에[1, 2]전체를 하나의 요소로 추가하려면 어떤 메서드를 써야 할까요? 코드를 완성해 보세요. - 문자열
"xy"를 리스트letters = ["a"]에 한 번에 한 글자씩 추가하는 코드와, "xy" 전체를 하나의 요소로 추가하는 코드를 각각 작성해 보세요.