Learning
레슨 4 / 9·20분

리스트, 딕셔너리, 세트, 튜플 심화

리스트 심화

Python 리스트는 다양한 내장 메서드를 제공합니다. 정렬, 역순, 복사 등 자주 쓰이는 조작법을 알아봅시다.

python
# 리스트 메서드 심화
numbers = [3, 1, 4, 1, 5, 9, 2, 6]

# 정렬
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9]

# 역순 정렬
numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 4, 3, 2, 1, 1]

# 원본을 유지하며 정렬
original = [3, 1, 4, 1, 5]
sorted_list = sorted(original)
print(original)     # [3, 1, 4, 1, 5]
print(sorted_list)  # [1, 1, 3, 4, 5]

# 리스트 언패킹
first, *rest = [1, 2, 3, 4, 5]
print(first)  # 1
print(rest)   # [2, 3, 4, 5]

# 중첩 리스트 (2D)
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][2])  # 6

튜플 (Tuple)

튜플은 리스트와 비슷하지만 변경 불가능(immutable)합니다. 소괄호 ()로 생성하며, 딕셔너리의 키로 사용할 수 있습니다.

python
# 튜플 생성
point = (3, 4)
rgb = (255, 128, 0)

# 언패킹
x, y = point
print(x, y)  # 3 4

# 함수에서 여러 값 반환
def divide(a, b):
    return a // b, a % b

quotient, remainder = divide(17, 5)
print(quotient, remainder)  # 3 2

# 네임드 튜플
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(3, 4)
print(p.x, p.y)  # 3 4

세트 (Set)

세트는 중복을 허용하지 않는 순서 없는 집합입니다. 합집합, 교집합, 차집합 등 수학적 집합 연산을 지원합니다.

python
# 세트 생성
fruits = {"사과", "바나나", "포도", "사과"}  # 중복 제거
print(fruits)  # {"사과", "바나나", "포도"}

# 세트 연산
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)   # 합집합: {1, 2, 3, 4, 5, 6}
print(a & b)   # 교집합: {3, 4}
print(a - b)   # 차집합: {1, 2}
print(a ^ b)   # 대칭차: {1, 2, 5, 6}

# 멤버십 테스트 (리스트보다 빠름)
large_set = set(range(100000))
print(99999 in large_set)  # True (O(1))

# 리스트에서 중복 제거
nums = [1, 2, 2, 3, 3, 3]
unique = list(set(nums))
print(unique)  # [1, 2, 3]

딕셔너리 심화

python
# defaultdict - 기본값 자동 생성
from collections import defaultdict

word_count = defaultdict(int)
for word in ["apple", "banana", "apple", "cherry", "banana", "apple"]:
    word_count[word] += 1
print(dict(word_count))  # {"apple": 3, "banana": 2, "cherry": 1}

# Counter - 빈도수 세기
from collections import Counter
c = Counter("abracadabra")
print(c.most_common(3))  # [("a", 5), ("b", 2), ("r", 2)]

# 딕셔너리 병합 (Python 3.9+)
defaults = {"color": "red", "size": 10}
overrides = {"size": 20, "weight": 5}
merged = defaults | overrides
print(merged)  # {"color": "red", "size": 20, "weight": 5}
  • list -- 순서 있는 변경 가능한 시퀀스 []
  • tuple -- 순서 있는 변경 불가능한 시퀀스 ()
  • set -- 중복 없는 순서 없는 집합 {}
  • dict -- 키-값 쌍의 매핑 {k: v}
  • frozenset -- 변경 불가능한 세트 (딕셔너리 키로 사용 가능)
💡

데이터가 변경되지 않아야 한다면 리스트 대신 튜플을 사용하세요. 실수로 값을 바꾸는 것을 방지하고, 딕셔너리 키로도 사용할 수 있습니다.