C
Python/입문/Lesson 04

리스트 (List)

1시간·theory
이 챕터
3/7
Python

리스트 (List)

🎯 이 lesson 을 읽고 나면

이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.

  • ✅ 리스트 슬라이싱 + 컴프리헨션
  • ✅ list vs tuple 선택 + 깊은 복사 (copy.deepcopy)
  • ✅ sort vs sorted (원본 변경 여부)

학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.

list 8가지 핵심 — 코드 + 실행 결과

list = 순서 있는 + 변경 가능 + 어떤 타입이든 담는 자료구조. Python 에서 가장 자주 쓰임.


1. 만들기

python
숫자들 = [1, 2, 3, 4, 5]
이름들 = ["홍길동", "이몽룡", "성춘향"]
섞임 = [1, "둘", 3.0, True]      # 타입 섞어도 OK
빈_리스트 = []

print(len(숫자들))     # 5 (개수)
print(type(숫자들))    # <class 'list'>

2. 인덱싱 — 0 부터 시작

python
과일들 = ["사과", "배", "감", "귤"]

print(과일들[0])       # "사과"  (첫 번째)
print(과일들[-1])      # "귤"   (마지막) ← 음수 OK
print(과일들[-2])      # "감"   (뒤에서 두 번째)

⚠️ 과일들[10]IndexError: list index out of range


3. 슬라이싱 — [시작:끝]

python
숫자들 = [10, 20, 30, 40, 50]

print(숫자들[1:4])     # [20, 30, 40]   ← 1 부터 4 직전까지
print(숫자들[:3])      # [10, 20, 30]   ← 처음부터 3 직전
print(숫자들[2:])      # [30, 40, 50]   ← 2 부터 끝까지
print(숫자들[::-1])    # [50, 40, 30, 20, 10]   ← 거꾸로

핵심: 끝 인덱스는 직전까지 (포함 X). [::-1] 은 거꾸로 뒤집기 관용구.


4. 추가·삭제

python
과일들 = ["사과", "배"]

과일들.append("감")       # ["사과", "배", "감"]
과일들.insert(1, "포도")  # ["사과", "포도", "배", "감"]
과일들.remove("배")       # ["사과", "포도", "감"]
끝_과일 = 과일들.pop()    # 끝_과일 = "감", 리스트 = ["사과", "포도"]

print(과일들)

5. 탐색·확인

python
과일들 = ["사과", "배", "감"]

print("배" in 과일들)         # True
print("포도" in 과일들)       # False
print(과일들.index("감"))     # 2 (몇 번째?)
print(과일들.count("사과"))   # 1 (몇 개 있나?)

6. 정렬

python
숫자들 = [3, 1, 4, 1, 5, 9, 2]

숫자들.sort()                # 원본 변경
print(숫자들)                # [1, 1, 2, 3, 4, 5, 9]

원본 = [3, 1, 4]
정렬됨 = sorted(원본)         # 새 리스트 반환
print(원본, 정렬됨)          # [3, 1, 4] [1, 3, 4]

숫자들.sort(reverse=True)
print(숫자들)                # [9, 5, 4, 3, 2, 1, 1]

sort() = 본인이 변함 / sorted(x) = 새 리스트 반환.


7. 순회 (for)

python
과일들 = ["사과", "배", "감"]

for 과일 in 과일들:
    print(f"{과일} 한 개")

# 인덱스도 같이
for i, 과일 in enumerate(과일들):
    print(f"{i}번째: {과일}")

실행 결과:

code
사과 한 개
배 한 개
감 한 개
0번째: 사과
1번째: 배
2번째: 감

8. list comprehension — 한 줄로 변환

python
숫자들 = [1, 2, 3, 4, 5]

제곱 = [x * x for x in 숫자들]
print(제곱)                  # [1, 4, 9, 16, 25]

짝수 = [x for x in 숫자들 if x % 2 == 0]
print(짝수)                  # [2, 4]

[표현식 for 변수 in 반복가능 if 조건] — Python 의 정체성 같은 문법.


한 줄 요약

작업메서드
추가append / insert
삭제remove (값) / pop (인덱스)
탐색in / index / count
정렬sort() (변경) / sorted() (새것)
변환[x for x in ...]
💻 장바구니 조작 + 슬라이싱 + 정렬
# ===== 입력: 장바구니 =====
cart = ["사과", "바나나", "우유"]

# ===== 처리: 항목 추가/제거 =====
cart.append("계란")         # 끝에 추가
cart.append("두부")
print(f"추가 후: {cart}")    # ['사과', '바나나', '우유', '계란', '두부']

cart.remove("바나나")        # 값으로 삭제
last = cart.pop()           # 마지막 요소 꺼내기 (제거 + 반환)
print(f"제거 후: {cart}")    # ['사과', '우유', '계란']
print(f"꺼낸 항목: {last}")  # 두부

# ===== 인덱스 접근 =====
print(cart[0])              # 사과 (첫 번째)
print(cart[-1])             # 계란 (마지막)

# ===== 슬라이싱: [start:end] end는 미포함 =====
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4])         # [20, 30, 40]
print(numbers[:3])          # [10, 20, 30] (처음부터 3개)
print(numbers[2:])          # [30, 40, 50] (3번째부터 끝까지)

# ===== 길이 및 정렬 =====
scores = [88, 72, 95, 61, 83]
print(f"항목 수: {len(scores)}")        # 5
print(f"정렬: {sorted(scores)}")        # [61, 72, 83, 88, 95]
print(f"최댓값: {max(scores)}")         # 95
print(f"합계: {sum(scores)}")           # 399

💡 핵심 포인트

1. 음수 인덱스: -1은 마지막 요소
2. 슬라이싱: [시작:끝:간격]
3. sort()는 원본 변경, sorted()는 새 리스트 반환

Python 기본 자료구조: 리스트는 순서 있는 가변 컬렉션, 튜플은 불변, 딕셔너리는 키-값 쌍, 셋은 고유값 집합입니다. 리스트 컴프리헨션 [x for x in lst if cond]으로 간결하게 생성합니다. dict.get(key, default)로 안전하게 값을 조회합니다. collections 모듈: Counter, defaultdict, deque, OrderedDict.

🐍 실행해보기 — 리스트 (List)

위 개념을 실제로 코드로 실행해보세요. 값을 바꿔가며 어떻게 동작하는지 직접 확인하는 게 가장 빠른 학습.
✏️ Python 코드
📟 콘솔 출력
▶ 실행 버튼을 눌러보세요
🐍 Pyodide로 실제 Python 실행 — 첫 실행 시 로딩 3~5초 소요

🤖 AI 에게 이렇게 요청해보세요

이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.

  • "이 for + append 를 리스트 컴프리헨션으로 바꿔줘"
  • "이 코드의 깊은 복사 (copy.deepcopy) 필요성 점검해줘"

왜 이게 토큰을 줄이나

개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.

리스트 완전 정복 - Python