파이썬으로 코딩하다 보면 하나의 변수에 여러 데이터를 묶어서 관리해야 하는 상황이 끊임없이 생깁니다. 이때 가장 먼저 손이 가고, 실제로도 가장 많이 쓰이는 무기가 바로 '리스트(List)'입니다. 리스트는 단순히 데이터를 한데 모아두는 것을 넘어, 순서를 보장하고 크기를 마음대로 늘렸다 줄였다 할 수 있어 프로그램의 유연성을 극대화해 줍니다. 이번 포스팅에서는 파이썬 리스트의 핵심 특징부터 시작해 자유자재로 데이터를 요리하는 슬라이싱 기법, 그리고 파이썬의 꽃이라 불리는 리스트 컴프리헨션까지 깔끔하게 정리해 보겠습니다.

📌 핵심 요약 3줄
- 리스트는 대괄호[]를 사용하며, 입력된 순서가 유지되고 중복된 데이터와 다양한 자료형을 동시에 담을 수 있습니다.
- 데이터 추가(append, insert)와 삭제(remove, pop, del) 메서드는 동작 방식과 결과물이 다르므로 구별해서 써야 합니다.
- 리스트 컴프리헨션을 활용하면 복잡한 반복문과 조건문을 단 한 줄로 줄여 직관적인 리스트 생성이 가능합니다.
1. 파이썬 리스트(List)의 3대 특징
리스트는 여러 개의 데이터를 순서대로 늘어놓은 가변 배열 구조입니다. 흔히 쓰는 엑셀의 한 열(Column)을 떠올리면 이해하기 쉽습니다.
| 특징 종류 | 상세 설명 | 개발 시 이점 |
| 순서 보장 (Ordered) | 데이터가 입력된 순서 그대로 방 번호(인덱스)가 부여됩니다. | 순차적인 데이터 제어 및 정렬 가능 |
| 가변성 (Mutable) | 생성된 이후에도 자유롭게 크기를 늘리거나 요소를 바꿀 수 있습니다. | 실시간 데이터 추가/삭제에 유연함 |
| 중복 및 혼합 허용 | 똑같은 값을 여러 번 넣을 수 있고, 숫자와 문자를 섞어 넣어도 됩니다. | 데이터 형식에 제한 없는 자유로운 저장 |
# 정수, 문자열, 불리언을 하나의 리스트에 몽땅 담을 수 있습니다.
my_list = [1, 2, 3, "Hello", True]
2. 리스트의 기본: 인덱싱과 슬라이싱
리스트 안의 데이터에 접근하고 원하는 부위만 싹둑 잘라내는 방법입니다.
① 인덱싱 (Indexing) - 특정 위치의 값 가리키기
파이썬은 첫 번째 데이터의 방 번호를 0번부터 셉니다. 뒤에서부터 거꾸로 셀 때는 -1번부터 시작한다는 점이 파이썬만의 독특하고 편리한 기능입니다.
items = [10, 20, 30, 40, 50]
print(items[0]) # 출력: 10 (첫 번째 요소)
print(items[-1]) # 출력: 50 (맨 마지막 요소)
② 슬라이싱 (Slicing) - 원하는 구간 잘라내기
리스트[시작_인덱스 : 끝_인덱스] 형태로 작성하며, 중요한 점은 끝 인덱스 직전(끝_인덱스 - 1)까지만 잘라낸다는 사실입니다. 원본 리스트는 그대로 유지됩니다.
# items[1]부터 items[3]까지 가려내기
print(items[1:4]) # 출력: [20, 30, 40]
print(items[:3]) # 출력: [10, 20, 30] (처음부터 2번 방까지)
print(items[3:]) # 출력: [40, 50] (3번 방부터 끝까지)
3. 리스트를 자유자재로 다루는 필수 메서드
리스트에 데이터를 넣고 빼고 정렬하는 핵심 함수들을 기능별로 일목요연하게 묶었습니다.
① 데이터 추가 및 확장 메서드
| 메서드 명 | 동작 방식 | 코드 예시 (my_list = [1, 2]) | 실행 후 리스트 상태 |
| append(값) | 리스트 맨 끝에 새로운 요소를 붙입니다. | my_list.append(3) | [1, 2, 3] |
| insert(인덱스, 값) | 내가 지정한 위치에 값을 쏙 끼워 넣습니다. | my_list.insert(1, 99) | [1, 99, 2] |
| extend(리스트) | 다른 리스트를 통째로 이어 붙여 확장합니다. | my_list.extend([4, 5]) | [1, 2, 4, 5] |
② 데이터 삭제 메서드
| 메서드 명 / 구문 | 동작 방식 | 코드 예시 (my_list = [10, 20, 30]) | 실행 후 결과 및 리스트 |
| remove(값) | 리스트에서 특정 값을 찾아 지웁니다. (중복 시 첫 값만) | my_list.remove(20) | [10, 30] |
| pop(인덱스) | 번호에 해당하는 값을 꺼내서 반환하고 리스트에서 삭제합니다. | val = my_list.pop(0) | val = 10, 리스트: [20, 30] |
| del 리스트[인덱스] | 파이썬 기본 명령어로, 해당 위치의 요소를 가차 없이 삭제합니다. | del my_list[1] | [10, 30] |
③ 기타 유용한 정렬 및 탐색 함수
- len(my_list): 리스트에 총 몇 개의 데이터가 들어있는지 개수(길이)를 알려줍니다.
- sort(): 요소를 오름차순으로 정렬합니다. 괄호 안에 reverse=True를 넣으면 내림차순 정렬이 됩니다.
- reverse(): 정렬과 상관없이 현재 리스트의 순서를 앞뒤로 확 뒤집어 버립니다.
- count(값): 내가 지정한 특정 값이 리스트 안에 몇 개나 존재하는지 세어 줍니다.
4. 리스트와 반복문의 환상적인 궁합
리스트의 진가는 반복문과 만났을 때 발휘됩니다. for문을 이용하면 수천 개의 데이터를 순식간에 순회할 수 있습니다.
① 값만 필요할 때 vs 인덱스도 같이 필요할 때
fruits = ["apple", "banana", "cherry"]
# 1. 값만 순서대로 가져오기
for fruit in fruits:
print(fruit)
# 2. 방 번호(인덱스)와 값을 동시에 묶어서 가져오기
for index, value in enumerate(fruits):
print(f"{index}번 방의 과일은 {value}입니다.")
② 코드 다이어트의 주역: 리스트 컴프리헨션
리스트 컴프리헨션(List Comprehension)은 반복문과 조건문을 대괄호[] 안에 한 줄로 압축하여 새로운 리스트를 만드는 파이썬의 핵심 문법입니다.
# 기존 방식으로 0부터 9까지 제곱수 리스트 만들기 (4줄 필요)
squares = []
for x in range(10):
squares.append(x ** 2)
# 리스트 컴프리헨션으로 한 줄 컷! (가독성과 속도 모두 향상)
squares = [x ** 2 for x in range(10)]
# 출력: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 조건문까지 붙여서 '짝수의 제곱'만 골라 담기
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
5. 개발을 위한 팁
- 빈 리스트인지 검사할 때는 if not을 쓰세요: 리스트에 데이터가 비어 있는지 확인할 때 if len(my_list) == 0:이라고 쓰는 것보다, 파이썬에서는 빈 리스트를 거짓(False)으로 취급하는 성질을 이용해 if not my_list:라고 작성하는 것이 훨씬 파이썬답고 깔끔한 코드(Pythonic Code)입니다.
- 안전하게 값을 지울 땐 in 연산자 선행: remove(값)를 쓸 때 리스트에 존재하지 않는 값을 지우려고 하면 프로그램이 에러를 일으킵니다. 따라서 if 값 in 리스트: 조건문으로 값이 존재하는지 먼저 확인한 뒤 안전하게 지우는 버릇을 들이는 것이 좋습니다.
6. 흔히 하는 실수
- 원본을 바꾸는 메서드의 반환값(Return) 오해: sort()나 reverse() 같은 메서드는 리스트 원본의 내부 데이터를 직접 변경하는 함수입니다. 새롭게 가공된 리스트를 반환하지 않기 때문에, new_list = my_list.sort()라고 작성하면 new_list에는 값이 아니라 None이 담기게 되니 주의해야 합니다.
- 슬라이싱 범위 끝 번호의 헷갈림: 앞서 말씀드렸듯 my_list[1:3]은 1번, 2번 방의 값만 가져옵니다. 3번 방까지 포함하고 싶다면 반드시 끝 자리에 하나를 더한 [1:4]를 적어주어야 한다는 점, 코딩할 때 정말 자주 놓치는 부분입니다.
💡 맺음말
이번 시간에는 파이썬 자료구조의 가장 기본이자 핵심인 리스트(List)에 대해 샅샅이 파헤쳐 보았습니다. 방 번호로 다루는 인덱싱부터 데이터를 다이어트시켜 주는 컴프리헨션 문법까지, 오늘 다룬 내용만 손에 익히셔도 웬만한 복잡한 데이터 컬렉션은 무리 없이 요리하실 수 있을 겁니다.
실습하시다가 원하는 대로 슬라이싱이 안 되거나 컴프리헨션 문법이 꼬인다면 언제든 아래 댓글 창에 코드를 남겨주세요. 친절하게 피드백해 드리겠습니다. 감사합니다!
'Python for AI, Embedded > Python: Core & Automation' 카테고리의 다른 글
| 파이썬(Python) 튜플(Tuple) 특징과 사용법: 리스트와의 차이점부터 언패킹까지 (0) | 2025.06.23 |
|---|---|
| 파이썬(Python) 리스트 고급 기능 총정리: 컴프리헨션부터 메모리 최적화까지 (0) | 2025.06.22 |
| 파이썬(Python) 연산자 종류와 조건문(if문) 활용법 총정리 (0) | 2025.06.19 |
| 파이썬(Python) 주요 자료형 총정리: 특징부터 핵심 데이터 타입 비교까지 (0) | 2025.06.18 |
| 파이썬(Python) 기초 문법 총정리: 변수 개념부터 기본 입출력까지 (0) | 2025.06.17 |