파이썬 교재 · 5편 / 27편

파이썬 리스트 사용법 — append·sort·slice

여러 값을 한 변수에 담고 추가·정렬·자르는 6가지 동작.

입문읽는 시간 7분2026-05-13
파이썬 REPL 에서 리스트 append·sort·슬라이싱 결과 화면

변수 하나에 값 하나. 3편까지 우리가 다룬 건 그 단순한 관계였습니다. 그런데 학생 30명의 성적, 한 달치 매출, 장바구니 상품 — 현실의 일은 거의 다 여러 값을 묶어서 다룹니다. 그래서 등장하는 게 리스트(list). 파이썬의 4대 컬렉션(list·tuple·set·dict) 중 첫째이자 가장 자주 쓰는 자료구조입니다.

5편을 마치면 ① 리스트를 만들고 인덱스로 접근 ② 항목 추가·삭제 ③ 정렬·반전 ④ 슬라이싱과 복사 함정 ⑤ sum·max·min·in 으로 한 줄 통계 — 입문자가 매일 쓰는 동작을 다 손에 익힙니다.

리스트 만들기와 인덱스 접근

대괄호 [ ] 안에 값을 쉼표로 나열하면 리스트. 같은 자료형뿐 아니라 섞어 넣어도 됩니다.

nums  = [3, 1, 4, 1, 5, 9]
names = ["준성", "수민", "지훈"]
mixed = ["준성", 30, 1.75, True]      # 자료형 섞임 OK
empty = []                              # 빈 리스트로 시작

# 인덱스 접근 — 문자열과 똑같이 0부터, 음수는 뒤에서
nums[0]    # 3
nums[-1]   # 9 (마지막)
len(nums)  # 6 — 항목 수

4편의 문자열 인덱스와 똑같습니다. 사실 문자열도 글자의 리스트로 보면 거의 동일해요. 슬라이싱·in·len 모두 양쪽에서 같이 동작합니다. 한 번 익힌 동작이 자료구조 4가지에 다 통한다 는 게 파이썬의 일관성.

추가·삭제 — append·pop·remove·del

리스트는 문자열과 다르게 가변(mutable)입니다. 만들고 나서 바꿀 수 있어요.

nums = [3, 1, 4, 1, 5, 9]

nums.append(2)      # 끝에 추가 → [3, 1, 4, 1, 5, 9, 2]
nums.insert(0, 0)   # 0번 위치에 삽입 → [0, 3, 1, 4, 1, 5, 9, 2]
nums.pop()          # 끝에서 꺼냄, 값 돌려줌 → 2, 리스트는 [0, 3, 1, 4, 1, 5, 9]
nums.pop(0)         # 0번 꺼냄 → 0
nums.remove(1)      # '1' 값을 첫 등장만 제거 → [3, 4, 1, 5, 9]
del nums[2]         # 2번 인덱스 항목 제거 → [3, 4, 5, 9]
nums.clear()        # 전부 비움 → []

📌 append vs extend

a.append([4,5]) 는 리스트 전체를 한 항목으로 추가 → [1,2,3,[4,5]]. a.extend([4,5]) 는 항목들을 풀어서 추가 → [1,2,3,4,5]. 합치고 싶을 땐 extend 또는 + 연산자. 차이를 모르고 append 만 쓰면 중첩 리스트가 생겨 다음 단계 코드가 깨집니다.

정렬과 반전 — sort 와 sorted 의 차이

두 방법이 있고 결과는 비슷한데 원본을 건드리느냐가 다릅니다.

a = [3, 1, 4, 1, 5, 9]

a.sort()             # 원본을 바꿈, 반환값 None
print(a)             # [1, 1, 3, 4, 5, 9]

b = [3, 1, 4, 1, 5, 9]
new = sorted(b)      # 새 리스트를 반환, 원본은 그대로
print(b)             # [3, 1, 4, 1, 5, 9]
print(new)           # [1, 1, 3, 4, 5, 9]

a.sort(reverse=True) # 내림차순
sorted(b, reverse=True)

# 문자열 길이 기준 정렬 — key 인자
words = ["banana", "kiwi", "watermelon"]
words.sort(key=len)  # ['kiwi', 'banana', 'watermelon']

판단 기준: "원본을 유지하고 싶으면 sorted(), 영구 정렬하려면 .sort()". 후자는 디버깅 때 헷갈리기 쉬워서 입문자는 sorted() 부터 익히길 권장.

슬라이싱과 복사 함정

슬라이싱은 4편과 똑같이 동작합니다. nums[2:5], nums[::-1] — 다 됩니다. 그런데 리스트는 가변이라 복사 함정이 있어요. 입문자 90% 가 한 번은 걸립니다.

a = [1, 2, 3]
b = a               # ❌ 함정: 같은 리스트의 별명일 뿐
b.append(4)
print(a)            # [1, 2, 3, 4]  — a 도 같이 바뀜!

# 올바른 복사 3가지
b = a.copy()        # 명시적 메서드
b = a[:]            # 슬라이싱 트릭 (모든 항목)
b = list(a)         # 변환 함수

b.append(4)
print(a)            # [1, 2, 3]  — 안전
⚠️ 왜 이런 일이? 파이썬에서 = 는 값 복사가 아니라 같은 객체에 라벨 하나 더 붙이기. b = a 는 b 라는 새 라벨이 a 가 가리키던 리스트를 가리키게 할 뿐, 새 리스트를 만들지 않습니다. 문자열·정수는 불변이라 이 함정이 안 보이지만, 리스트·딕셔너리부터 드러납니다.

한 줄 통계 — sum·max·min·in

리스트의 진가는 내장 함수와 만났을 때 드러납니다. 30명 성적의 평균을 구하는 데 반복문은 필요 없어요.

scores = [82, 91, 75, 88, 60, 95, 78, 84]

sum(scores)               # 653
sum(scores) / len(scores) # 81.625 — 평균
max(scores), min(scores)  # (95, 60)
sorted(scores)[:3]        # [60, 75, 78] — 최하위 3명
sorted(scores)[-3:]       # [88, 91, 95] — 최상위 3명

# 멤버십 확인
60 in scores              # True
100 in scores             # False

# 등장 횟수
[1,2,2,3,2].count(2)      # 3

한 달치 매출도, 학생 성적도, 웹페이지 응답 시간도 — 리스트로 묶어 4-5줄로 요약 통계가 끝납니다. 21편 pandas 의 기초가 사실 이거예요. pandas Series 는 그냥 똑똑한 리스트입니다.

마무리 — 리스트는 모든 자료구조의 시작

다음에 배울 딕셔너리·집합·튜플 모두 리스트의 동작에서 갈라져 나옵니다. 인덱스가 정수 대신 문자열이면 딕셔너리, 중복을 허용 안 하면 집합, 한 번 만들면 못 바꾸면 튜플. 리스트의 6가지 동작 (만들기·인덱스·추가/삭제·정렬·슬라이싱·통계) 이 손에 익으면 나머지는 차이만 익히면 됩니다.

다음 미션 — REPL 에서: ① 1부터 10까지의 리스트를 한 줄로 (힌트: list(range(1,11))) ② 그 리스트에서 짝수만 (10편 컴프리헨션 예고편) ③ 본인 한 주 매출 7일치를 리스트로 넣고 평균·최고·최저 동시 출력.

다음 편 미리보기

6편 — "파이썬 딕셔너리": 키-값 짝으로 데이터를 묶는 두 번째 자료구조. JSON·설정 파일·DB 결과를 다루는 핵심.

📚 27편 파이썬 교재 시리즈 — 5/27편
← 4편 "문자열 다루기" · 다음: 6편 "딕셔너리 사용법"

© 2026 주나이테크(주) @JUNAITECH