BioPlayground

🧬
목록으로

리스트 컴프리헨션 — 한 줄로 리스트 만들기

Python의 리스트 컴프리헨션(list comprehension)으로 반복문을 한 줄로 줄이는 방법과 조건 필터링까지 배웁니다.

입문
|
8
|
검증 완료 (2026-07)
리스트 컴프리헨션list comprehension한 줄 리스트필터링dict comprehension
진행률0/15 (0%)

리스트 컴프리헨션 — 한 줄로 리스트 만들기

이 토픽을 마치면

for문 4줄을 1줄로 바꾸는 리스트 컴프리헨션 문법을 알게 되고, 조건 필터링과 딕셔너리 컴프리헨션까지 사용할 수 있습니다.


for문이 반복되는 패턴

리스트를 만들 때 이런 코드를 자주 씁니다:

python
numbers = [1, 2, 3, 4, 5]
squares = []
for n in numbers:
squares.append(n ** 2)
print(squares) # [1, 4, 9, 16, 25]

4줄입니다. 빈 리스트 만들고, for문 돌리고, append하고. 이 패턴이 계속 반복됩니다. Python은 이걸 한 줄로 줄이는 문법을 제공합니다:

python
squares = [n ** 2 for n in numbers]

이것이 리스트 컴프리헨션(list comprehension)입니다.


구조

python
[표현식 for 변수 in 반복가능한것]

읽는 방법: "반복가능한 것에서 변수를 하나씩 꺼내서, 표현식을 적용한 결과로 리스트를 만든다."

python
# 문자열을 대문자로
names = ['alice', 'bob', 'charlie']
upper = [name.upper() for name in names]
# ['ALICE', 'BOB', 'CHARLIE']
# 문자열 길이
lengths = [len(name) for name in names]
# [5, 3, 7]
# 1부터 10까지
nums = [i for i in range(1, 11)]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

조건 필터링 — if 추가

python
[표현식 for 변수 in 반복가능 if 조건]
python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 짝수만
evens = [n for n in numbers if n % 2 == 0]
# [2, 4, 6, 8, 10]
# 3보다 큰 수의 제곱
big_squares = [n ** 2 for n in numbers if n > 3]
# [16, 25, 36, 49, 64, 81, 100]

if필터 역할입니다. 조건에 맞는 것만 결과에 포함됩니다.

for문으로 쓰면:

python
evens = []
for n in numbers:
if n % 2 == 0:
evens.append(n)

5줄이 1줄이 됩니다.


if-else — 조건부 변환

필터가 아니라 변환을 하고 싶으면 if-else를 앞에 넣습니다:

python
# 짝수면 "짝", 홀수면 "홀"
labels = ["짝" if n % 2 == 0 else "홀" for n in range(1, 6)]
# ['홀', '짝', '홀', '짝', '홀']

위치가 다릅니다:

  • 필터(제외): [x for x in lst if 조건] — if가 뒤에
  • 변환(선택): [A if 조건 else B for x in lst] — if-else가 앞에

딕셔너리 컴프리헨션

중괄호로 감싸면 딕셔너리를 만듭니다:

python
names = ['alice', 'bob', 'charlie']
name_len = {name: len(name) for name in names}
# {'alice': 5, 'bob': 3, 'charlie': 7}
python
# 값 뒤집기
original = {'a': 1, 'b': 2, 'c': 3}
flipped = {v: k for k, v in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}

세트 컴프리헨션

중괄호 + 값만 넣으면 세트입니다:

python
words = ['hello', 'world', 'hello', 'python']
unique_lengths = {len(w) for w in words}
# {5, 6}

가독성 경고

python
# 이건 괜찮습니다
result = [x * 2 for x in range(10) if x % 2 == 0]
# 이건 읽기 어렵습니다
result = [f(x, y) for x in range(10) for y in range(10) if x != y if g(x, y) > threshold]

컴프리헨션이 한 줄에 다 안 들어오거나, 중첩 for문 + 조건이 2개 이상이면 일반 for문으로 쓰는 게 낫습니다. 짧은 코드가 항상 좋은 코드는 아닙니다. 읽을 수 있는 코드가 좋은 코드입니다.


핵심

리스트 컴프리헨션은 [표현식 for 변수 in 반복 if 조건] 한 줄로 리스트를 만드는 문법입니다. 필터링은 if를 뒤에, 조건부 변환은 if-else를 앞에 놓습니다. {} + key: value면 딕셔너리, {} + 값만이면 세트 컴프리헨션. 한 줄에 다 못 넣으면 for문으로 쓰세요 — 가독성이 우선입니다.