리스트와 튜플 응용하기

Tasker_Jang·2026년 2월 18일

1. 리스트에 요소 추가하기

리스트에 요소를 추가하는 메서드는 세 가지가 있습니다. 각각의 특성이 다르기 때문에 상황에 맞게 사용하는 것이 중요합니다.

메서드기능특징
append(요소)요소 하나를 리스트 끝에 추가리스트를 넣으면 중첩 리스트가 됨
extend(리스트)리스트를 연결하여 확장원본 리스트가 변경되며, 새 리스트는 생성되지 않음
insert(인덱스, 요소)특정 인덱스에 요소 추가원하는 위치에 삽입 가능

append — 요소 하나 추가

append는 리스트 끝에 요소 하나를 추가합니다. 주의할 점은, 리스트를 인자로 넣으면 리스트 자체가 하나의 요소로 들어간다는 것입니다.

# append로 요소 하나 추가
a = [1, 2, 3]
a.append(4)
print(a)  # [1, 2, 3, 4]

# 리스트를 append하면 중첩 리스트가 된다
a.append([5, 6])
print(a)  # [1, 2, 3, 4, [5, 6]]

요소 여러 개를 각각 추가하려면 append를 여러 번 호출해야 하므로 번거롭습니다.

extend — 리스트 확장

여러 요소를 한 번에 추가하고 싶다면 extend를 사용합니다. 메서드를 호출한 리스트 자체가 변경되며, 새로운 리스트는 생성되지 않습니다.

# extend로 여러 요소 한 번에 추가
a = [1, 2, 3]
a.extend([4, 5, 6])
print(a)  # [1, 2, 3, 4, 5, 6]

insert — 원하는 위치에 삽입

insert는 지정한 인덱스에 요소를 추가합니다.

# insert로 특정 위치에 요소 추가
a = [1, 2, 3]
a.insert(1, 100)
print(a)  # [1, 100, 2, 3]

만약 리스트 중간에 요소 여러 개를 추가하고 싶다면, 슬라이스에 요소를 할당하는 방법을 활용할 수 있습니다.

# 슬라이스를 활용한 중간 삽입
a = [1, 2, 3, 4, 5]
a[2:2] = [10, 20, 30]
print(a)  # [1, 2, 10, 20, 30, 3, 4, 5]

2. 리스트에서 요소 삭제하기

요소 삭제와 관련된 메서드와 키워드를 정리하면 다음과 같습니다.

방법기능반환값
pop()마지막 요소 삭제삭제된 요소 반환
pop(인덱스)해당 인덱스의 요소 삭제삭제된 요소 반환
del 리스트[인덱스]해당 인덱스의 요소 삭제반환값 없음
remove(값)특정 값을 찾아 삭제반환값 없음, 처음 찾은 값만 삭제
a = [10, 20, 30, 20, 40]

# pop: 마지막 요소 삭제 후 반환
last = a.pop()
print(last)  # 40
print(a)     # [10, 20, 30, 20]

# pop(인덱스): 특정 인덱스 요소 삭제 후 반환
second = a.pop(1)
print(second)  # 20
print(a)       # [10, 30, 20]

# remove: 값으로 삭제 (같은 값이 여러 개면 처음 찾은 것만 삭제)
a = [10, 20, 30, 20]
a.remove(20)
print(a)  # [10, 30, 20]

💡 pop은 삭제한 요소를 반환하므로, 삭제와 동시에 값을 활용해야 할 때 유용합니다. 단순 삭제만 필요하다면 del을 사용해도 좋습니다.


3. 리스트 정보 조회 메서드

a = [10, 20, 30, 20, 40]

# index: 특정 값의 인덱스를 구함 (처음 찾은 것)
print(a.index(20))  # 1

# count: 특정 값의 개수를 구함
print(a.count(20))  # 2

4. 정렬과 뒤집기

reverse — 순서 뒤집기

reverse는 리스트의 요소 순서를 반대로 뒤집습니다. 정렬이 아닌 단순 역순이라는 점에 주의하세요.

a = [3, 1, 2]
a.reverse()
print(a)  # [2, 1, 3]

sort vs sorted — 정렬의 두 가지 방법

이 둘은 모두 정렬을 수행하지만, 원본 변경 여부에서 차이가 있습니다.

구분sort()sorted()
종류리스트 메서드내장 함수
원본 변경✅ 원본 리스트를 변경❌ 새 리스트를 생성
반환값None정렬된 새 리스트
# sort: 원본 리스트를 오름차순으로 변경
a = [3, 1, 4, 1, 5]
a.sort()
print(a)  # [1, 1, 3, 4, 5]

# sorted: 원본은 유지하고 새 리스트를 반환
b = [3, 1, 4, 1, 5]
new_b = sorted(b)
print(b)      # [3, 1, 4, 1, 5] (원본 유지)
print(new_b)  # [1, 1, 3, 4, 5]

⚠️ sort()의 반환값은 None이므로, a = a.sort()처럼 쓰면 aNone이 됩니다. 흔히 하는 실수이니 주의하세요!


5. 리스트 초기화와 복사

clear — 모든 요소 삭제

a = [1, 2, 3]
a.clear()
print(a)  # []

# del을 활용한 방법도 동일한 결과
b = [1, 2, 3]
del b[:]
print(b)  # []

할당 vs 복사 — 큰 차이점

이 부분은 파이썬 입문자가 자주 혼동하는 핵심 개념입니다.

할당은 같은 리스트를 두 변수가 가리키는 것이고, 복사는 완전히 독립된 리스트를 만드는 것입니다.

# 할당: 같은 리스트를 공유 (실제로 리스트는 하나)
a = [1, 2, 3]
b = a
b[0] = 999
print(a)  # [999, 2, 3] ← a도 같이 변경됨!

# 복사: 독립된 리스트를 생성
a = [1, 2, 3]
b = a.copy()
b[0] = 999
print(a)  # [1, 2, 3] ← a는 변경되지 않음

💡 copy()얕은 복사(shallow copy)입니다. 리스트 안에 리스트가 있는 중첩 구조에서는 copy 모듈의 deepcopy()를 사용해야 완전한 복사가 됩니다.


6. 반복문과 리스트 활용

기본 순회와 enumerate

# 기본 순회
a = ['apple', 'banana', 'cherry']
for item in a:
    print(item)

# enumerate: 인덱스와 값을 함께 출력
for i, item in enumerate(a):
    print(f"{i}: {item}")
# 0: apple
# 1: banana
# 2: cherry

min, max, sum

a = [10, 20, 30]

print(min(a))  # 10
print(max(a))  # 30
print(sum(a))  # 60

7. 리스트 컴프리헨션 (List Comprehension)

리스트 안에 식, for 반복문, if 조건문을 사용하여 리스트를 생성하는 것을 리스트 컴프리헨션이라고 합니다. 파이썬다운(Pythonic) 코드를 작성할 때 필수적으로 알아야 하는 문법입니다.

# 기본 형태: [식 for 변수 in 반복가능객체]
squares = [x ** 2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

if 조건문을 추가하여 필터링할 수도 있습니다.

# if 조건 추가: [식 for 변수 in 반복가능객체 if 조건]
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

forif를 여러 번 사용하는 것도 가능합니다.

# 중첩 for문을 활용한 리스트 컴프리헨션
pairs = [(x, y) for x in range(3) for y in range(3) if x != y]
print(pairs)  # [(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]

8. map 함수

map은 리스트의 요소를 지정된 함수로 처리해주는 함수입니다. 반환값은 맵 객체(이터레이터)이므로, list()로 감싸거나 언패킹하여 사용합니다.

# map으로 모든 요소에 함수 적용
a = [1, 2, 3, 4]
result = list(map(lambda x: x ** 2, a))
print(result)  # [1, 4, 9, 16]

# 언패킹 활용
a, b, c = map(int, ['10', '20', '30'])
print(a, b, c)  # 10 20 30

9. 튜플 — 변경 불가능한 리스트

튜플(tuple)은 리스트와 달리 한 번 만들면 내용을 변경할 수 없습니다. 따라서 요소를 조회하는 메서드만 사용할 수 있습니다.

메서드기능
index(값)특정 값의 인덱스를 구함
count(값)특정 값의 개수를 구함
t = (10, 20, 30, 20)
print(t.index(20))  # 1
print(t.count(20))  # 2

튜플에도 map, min, max, sum을 사용할 수 있습니다.

t = (10, 20, 30)
print(min(t))  # 10
print(max(t))  # 30
print(sum(t))  # 60

⚠️ 주의: 괄호 안에 표현식을 넣으면 튜플이 아니라 제너레이터 표현식이 됩니다.

# 이것은 튜플이 아니라 제너레이터!
g = (x ** 2 for x in range(5))
print(type(g))  # <class 'generator'>

# 튜플 컴프리헨션을 원한다면 tuple()로 감싸야 합니다
t = tuple(x ** 2 for x in range(5))
print(t)  # (0, 1, 4, 9, 16)

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글