지난 포스팅까지 우리는 숫자(int/float)와 문자열(str)이라는 개별적인 데이터 타입을 다루는 법을 배웠습니다. 변수라는 상자에 데이터를 하나씩 담아서 처리했죠. 그런데 만약 여러분이 쇼핑몰 프로그램을 만든다고 상상해 보세요.
고객이 장바구니에 상품을 100개 담았습니다. 그렇다면 우리는 item1, item2... item100까지 변수를 100개나 만들어야 할까요? 생각만 해도 끔찍한 일입니다.
이럴 때 필요한 것이 바로 '데이터를 줄줄이 엮어서 관리하는 도구'입니다. 파이썬에서는 이것을 리스트(List)라고 부릅니다. 리스트를 정복하는 순간, 여러분은 비로소 "대량의 데이터"를 효율적으로 다룰 수 있는 힘을 얻게 됩니다.

1. 리스트(List)란 무엇인가?
변수가 데이터를 하나 담는 '작은 상자'라면, 리스트는 여러 개의 데이터를 순서대로 담을 수 있는 '화물 기차'와 같습니다. 기차의 각 칸(Element)마다 데이터를 싣고, 기차 전체에 하나의 이름을 붙여서 관리하는 것입니다.
(1) 리스트 만드는 법
대괄호 []를 사용하고, 데이터 사이는 쉼표, 로 구분합니다.
# 비어있는 리스트 만들기
empty_list = []
# 숫자를 담은 리스트
numbers = [1, 2, 3, 4, 5]
# 문자를 담은 리스트 (장바구니)
cart = ["사과", "바나나", "우유"]
(2) 파이썬 리스트만의 강력한 특징
C언어 등 다른 언어의 '배열(Array)'과 달리 파이썬 리스트는 자유도가 엄청나게 높습니다.
- 서로 다른 자료형 혼용 가능: 숫자, 문자, 심지어 리스트 안에 또 다른 리스트를 넣을 수도 있습니다.
mixed = [1, "Apple", 3.14, [10, 20]] - 길이 제한 없음: 메모리가 허용하는 한 데이터를 무한대로 추가할 수 있습니다.
2. 리스트의 기본 조작: 인덱싱과 슬라이싱
반가운 소식입니다! 지난 시간에 배운 문자열(String)의 규칙이 리스트에도 100% 똑같이 적용됩니다. 리스트도 '순서'가 있기 때문입니다.
colors = ["Red", "Green", "Blue", "Yellow"]
# 인덱싱 (하나 꺼내기)
print(colors[0]) # "Red" (0번부터 시작)
print(colors[-1]) # "Yellow" (맨 뒤)
# 슬라이싱 (잘라내기)
print(colors[1:3]) # ["Green", "Blue"] (1번 이상 3번 미만)
이처럼 문자열을 잘 공부했다면 리스트의 기본 조작은 식은 죽 먹기입니다.
3. 리스트 필수 함수 Best 5 (CRUD 구현하기)
리스트의 진정한 힘은 데이터를 추가하고(Create), 삭제하고(Delete), 정렬하는(Sort) 함수들에 있습니다. 실무에서 하루에 백 번도 더 쓰는 필수 함수 5가지를 정리해 드립니다.
① append(): 데이터 추가하기 (맨 뒤)
가장 많이 씁니다. 리스트의 맨 끝에 새로운 데이터를 덧붙입니다.
cart = ["사과", "우유"]
cart.append("두부")
print(cart) # 결과: ["사과", "우유", "두부"]
② insert(): 데이터 삽입하기 (원하는 위치)
새치기를 시키는 함수입니다. 원하는 인덱스 번호를 지정해서 끼워 넣습니다.
# insert(인덱스, 값)
cart.insert(1, "콜라")
print(cart) # 결과: ["사과", "콜라", "우유", "두부"]
사과(0번)와 우유(원래 1번) 사이에 콜라가 들어갔습니다.
③ del vs remove() vs pop(): 데이터 삭제하기
삭제는 방법이 다양해서 면접 질문으로도 자주 나옵니다. 차이점을 명확히 알아두세요.
- del 키워드: 인덱스 번호로 삭제합니다. (예:
del cart [0]-> 맨 앞 삭제) - remove(값): 값으로 찾아서 삭제합니다. (예:
cart.remove("우유")) - pop(): 맨 뒤의 값을 꺼내서 반환하고 삭제합니다. (꺼내서 쓰고 버릴 때 유용)
④ sort(): 정렬하기
데이터를 가나다순(오름차순)으로 예쁘게 정렬해 줍니다.
numbers = [3, 1, 5, 2, 4]
numbers.sort()
print(numbers) # 결과: [1, 2, 3, 4, 5]
[전문가 Tip] sort()와 sorted()의 차이numbers.sort()는 원본 리스트 자체를 바꿔버립니다. 반면 sorted(numbers)는 원본은 그대로 두고 정렬된 새로운 리스트를 만들어 줍니다. 원본 데이터를 보존해야 한다면 sorted()를 써야 합니다.
⑤ len(): 길이(개수) 세기
리스트 안에 데이터가 몇 개 들어있는지 알려줍니다. 반복문(Loop)을 돌릴 때 필수적입니다.
print(len(cart)) # 리스트에 담긴 상품 개수 출력
4. 리스트 수정하기 (문자열과의 결정적 차이)
지난 포스팅에서 문자열은 불변(Immutable)이라 수정이 안 된다고 했습니다. 하지만 리스트는 가변(Mutable)입니다. 즉, 인덱싱으로 접근해서 내용을 마음대로 바꿀 수 있습니다.
# 문자열 수정 불가 (에러 발생)
s = "Python"
# s[0] = "J" -> TypeError!
# 리스트 수정 가능 (성공)
L = ["Python", "Java"]
L[0] = "C++"
print(L) # 결과: ["C++", "Java"]
이 유연함 덕분에 리스트는 데이터 관리의 핵심 도구로 사용됩니다.
5. 결론: 리스트, 데이터 관리의 시작
오늘은 파이썬에서 가장 중요한 자료구조인 리스트의 개념과 필수 함수들을 알아보았습니다. 기차처럼 데이터를 길게 연결하고, 마음대로 붙였다 떼었다 할 수 있는 리스트야말로 프로그래밍의 자유를 보장하는 도구입니다.
리스트를 자유자재로 다룰 수 있다면, 이제 여러분은 쇼핑몰 장바구니, 수강생 명단, 일별 매출 데이터 등을 처리할 준비가 된 것입니다.
그런데 리스트와 비슷하게 생겼지만, "한 번 만들면 절대 내용을 바꿀 수 없는" 고집불통 자료형이 하나 더 있습니다. 다음 포스팅에서는 리스트의 쌍둥이 동생인 '튜플(Tuple)의 특징과 리스트와의 결정적 차이점'에 대해 비교 분석해 드리겠습니다. 왜 굳이 수정도 안 되는 튜플을 쓰는지, 그 이유를 알면 파이썬 실력이 한 단계 도약할 것입니다.