컴프리헨션과 내장 함수
리스트·딕셔너리·집합 컴프리헨션과 map, filter, zip, enumerate, sorted 및 키 함수를 사용해 간결한 해법을 작성합니다.
컴프리헨션과 내장 함수은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
리스트 컴프리헨션: 간결한 필터링
리스트 컴프리헨션은 for 반복문과 append를 한 줄의 깔끔한 표현으로 바꿉니다. [expr for item in iterable if condition]과 같은 형태입니다. 조금 더 빠르고 파이썬을 능숙하게 사용한다는 점도 보여 줍니다.
# Traditional loop
squares = []
for n in range(1, 6):
squares.append(n * n)
print(squares) # [1, 4, 9, 16, 25]
# List comprehension
squares = [n * n for n in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# With filter
evens = [n for n in range(10) if n % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]2차원 격자를 위한 중첩 컴프리헨션
중첩 컴프리헨션은 2차원 격자를 만듭니다. DP 표를 설정하는 표준적인 방법입니다. [[0]*C]*R는 모든 행이 하나의 내부 리스트를 공유하므로 사용하지 마십시오. 코드에서 올바른 방법을 보여 줍니다.
# WRONG: all rows are the same object!
bad = [[0] * 3] * 3
bad[0][0] = 9
print(bad) # [[9,0,0],[9,0,0],[9,0,0]] oops!
# CORRECT: each row is a separate list
good = [[0] * 3 for _ in range(3)]
good[0][0] = 9
print(good) # [[9,0,0],[0,0,0],[0,0,0]]딕셔너리와 집합 컴프리헨션
딕셔너리와 집합 컴프리헨션은 중괄호를 사용합니다. 딕셔너리는 {k: v for ...}, 집합은 {expr for ...} 형태입니다. 둘 다 필터링할 수 있으므로 한 줄에서 변환하거나 중복을 제거할 수 있습니다.
# Dict comprehension: square lookup
sq_map = {n: n**2 for n in range(1, 6)}
print(sq_map) # {1:1, 2:4, 3:9, 4:16, 5:25}
# Set comprehension: unique lengths
words = ['cat', 'dog', 'elephant', 'ant']
unique_lengths = {len(w) for w in words}
print(unique_lengths) # {3, 8} (order varies)제너레이터 표현식: 메모리 효율적 사용
컴프리헨션을 ()으로 감싸면 값을 한 번에 하나씩 생성하는 제너레이터가 되어 메모리를 절약할 수 있습니다. 매우 큰 수열에 대해 sum, max 또는 다른 함수에 바로 전달할 수 있습니다.
# List comprehension builds all values at once
total = sum([n**2 for n in range(1_000_000)])
# Generator yields one at a time — lower memory
total = sum(n**2 for n in range(1_000_000))
print(total) # 333332833333500000
# any/all with generators short-circuit early
nums = [4, 6, 8, 3, 10]
has_odd = any(n % 2 == 1 for n in nums)
print(has_odd) # True (stops at 3)map()과 filter(): 함수형 방식
map은 모든 항목에 함수를 적용하고, filter는 검사를 통과한 항목만 남깁니다. 둘 다 지연 평가되므로 결과를 보려면 list()로 감싸십시오. 컴프리헨션이 더 명확한 경우가 많습니다.
nums = [1, 2, 3, 4, 5]
# map: apply function to each element
doubled = list(map(lambda n: n * 2, nums))
print(doubled) # [2, 4, 6, 8, 10]
# filter: keep elements passing predicate
evens = list(filter(lambda n: n % 2 == 0, nums))
print(evens) # [2, 4]
# Equivalent comprehensions (often preferred)
doubled = [n * 2 for n in nums]
evens = [n for n in nums if n % 2 == 0]zip(): 시퀀스 쌍 만들기
zip은 두 시퀀스를 묶고 더 짧은 쪽에서 멈춥니다. 두 리스트를 동시에 순회하는 깔끔한 방법입니다. zip(*matrix)라는 요령을 사용하면 2차원 리스트를 전치할 수 있습니다. 코드를 확인해 보십시오.
keys = ['a', 'b', 'c']
values = [1, 2, 3]
pairs = list(zip(keys, values))
print(pairs) # [('a',1), ('b',2), ('c',3)]
# Build dict from two lists
d = dict(zip(keys, values))
print(d) # {'a':1, 'b':2, 'c':3}
# Transpose a matrix
matrix = [[1,2,3],[4,5,6],[7,8,9]]
transposed = [list(row) for row in zip(*matrix)]
print(transposed) # [[1,4,7],[2,5,8],[3,6,9]]enumerate(): 인덱스와 값 함께 사용하기
enumerate는 순회하면서 (index, value)를 제공합니다. range(len(lst))보다 깔끔하고 경계 초과 실수도 피할 수 있습니다. start 옵션을 사용하면 1부터 세기 시작할 수 있습니다.
fruits = ['apple', 'banana', 'cherry']
# Instead of: for i in range(len(fruits)):
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple / 1 banana / 2 cherry
# Start from 1
for i, fruit in enumerate(fruits, 1):
print(f'{i}. {fruit}')
# 1. apple / 2. banana / 3. cherry키 함수를 사용한 sorted()
sorted는 정렬된 새 리스트를 반환하며 사용자 지정 순서를 위한 키 함수를 받습니다. 길이순, 튜플의 특정 필드순 또는 대소문자를 구분하지 않는 순서로 정렬할 수 있습니다. 코드에서 여러 키를 사용한 정렬을 보여 줍니다.
# Sort by second element of tuple
intervals = [(1,3),(2,1),(0,5)]
print(sorted(intervals, key=lambda x: x[1]))
# [(2,1),(1,3),(0,5)]
# Sort strings case-insensitively
words = ['Banana', 'apple', 'Cherry']
print(sorted(words, key=str.lower))
# ['apple', 'Banana', 'Cherry']
# Sort by multiple keys: first by length, then alphabetically
words = ['fig', 'apple', 'ant', 'kiwi']
print(sorted(words, key=lambda w: (len(w), w)))
# ['ant', 'fig', 'kiwi', 'apple']키를 사용한 min()과 max()
min과 max도 키를 받을 수 있으므로, 한 번의 호출로 매핑된 값이 가장 작거나 큰 요소를 가져올 수 있습니다. 예를 들어 가장 긴 단어를 찾을 수 있습니다. 코드를 확인해 보십시오.
words = ['banana', 'fig', 'strawberry', 'kiwi']
longest = max(words, key=len)
print(longest) # strawberry
shortest = min(words, key=len)
print(shortest) # fig
# Find interval with earliest end
intervals = [(2,6),(1,3),(4,5)]
earlist_end = min(intervals, key=lambda x: x[1])
print(earlist_end) # (1, 3)빠른 단락 평가 검사를 위한 any()와 all()
any는 처음으로 참인 항목에서 멈추고, all은 처음으로 거짓인 항목에서 멈춥니다. 둘 다 단락 평가를 수행하므로 제너레이터와 함께 사용하면 조건을 빠르고 지연 방식으로 검사할 수 있습니다.
nums = [2, 4, 6, 7, 8]
all_even = all(n % 2 == 0 for n in nums)
print(all_even) # False (7 is odd)
has_large = any(n > 5 for n in nums)
print(has_large) # True (6 qualifies, stops there)
# Practical: check if sudoku row has no duplicates
row = [1, 2, 3, 4, 5, 6, 7, 8, 9]
valid = all(1 <= n <= 9 for n in row) and len(set(row)) == 9
print(valid) # Truesum(), abs(), divmod()
어디에서나 사용하는 세 가지 수학 도우미가 있습니다. sum, abs, divmod입니다. divmod(a, b)는 몫과 나머지를 한 번에 반환하므로 숫자의 각 자릿수를 뽑아낼 때 안성맞춤입니다.
# sum with generator
print(sum(n**2 for n in range(1, 6))) # 55
# abs for distance problems
print(abs(-7)) # 7
# divmod for digit extraction
num = 1234
digits = []
while num:
num, d = divmod(num, 10)
digits.append(d)
digits.reverse()
print(digits) # [1, 2, 3, 4]간단한 확인
간단히 확인해 보겠습니다. 컴프리헨션과 내장 함수에 대해 무엇을 익혔는지 살펴보십시오. 문제는 하나뿐이니 잘하실 수 있습니다. ✅
레슨 요약
요약하면, 컴프리헨션은 반복문을 한 줄짜리 표현으로 바꾸고, zip과 sorted 같은 내장 함수는 키 함수를 받으며, 제너레이터는 한 번만 순회하는 작업에서 메모리를 절약합니다.
자주 묻는 질문
“컴프리헨션과 내장 함수” 강의는 무료인가요?
네 — “컴프리헨션과 내장 함수” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“컴프리헨션과 내장 함수”에서 뭘 배우나요?
리스트·딕셔너리·집합 컴프리헨션과 map, filter, zip, enumerate, sorted 및 키 함수를 사용해 간결한 해법을 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“컴프리헨션과 내장 함수” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 리스트, 튜플, 슬라이싱
- Python의 딕셔너리와 집합
- 컴프리헨션과 내장 함수
- 함수, 클로저, 람다