Pythoncomprehension파이썬컴프리핸션
파이썬의 그, 리스트 for 문으로 초기화 하는 거 뭐였더라? - Comprehension
June 09, 2025
파이썬에 여러모로 개발할 때 쓰면 간편해지는 문법이 하나있다. Comprehension(이하 컴프리핸션)이다. 이 문법을 몰라도 파이썬을 이용하는 데에는 문제가 없다. 다른 방법으로도 충분히 똑같은 구현을 할 수 있기 때문이다. 하지만 이미 언급했듯이 알아두면 더 간단하게 구현이 가능하다는 이점을 얻을 수 있다.
리스트 예시
a = [0 for i in range(5)]
print(f'a: {a}')
# a: [0, 0, 0, 0, 0]
b = [i for i in range(5)]
print(f'b: {b}')
# b: [0, 1, 2, 3, 4]
말로 설명하는 것보다 예시를 들어 바로 보이는 것이 이해가 편할 거라고 생각했다. 기본적인 구조는 표현식(expression) 뒤에 for문이 따라오면 된다. 위처럼 for 문에서 선언한 변수를 표현식에서 사용을 해도 안 해도 문제될 것이 없다.
컴프리핸션은 위와 같이 특정 자료 구조를 갖는 변수를 초기화할 때 사용한다.
컴프리핸션을 사용할 수 있는 자료구조
- 리스트(list)
- 딕셔너리(dictionary)
- 셋(set)
c = [5, i for i in range(10)]
# error
위 예시에서 알 수 있듯이 리스트를 다른 값과 동시에 초기화할 수는 없는 것 같다.
if와 else 문
even = [i for i in range(10) if i % 2 == 0]
print(even)
# [0, 2, 4, 6, 8]
even_and_zero = [i if i % 2 == 0 else 0 for i in range(10) ]
print(even_and_zero)
# [0, 0, 2, 0, 4, 0, 6, 0, 8, 0]
컴프리핸션을 if와 else문을 사용하여 분기를 갖는 구현을 할 수 있다.
if문만 사용한다면 기본 구조의 뒤에 if문을 추가하면 된다.
if~else 문을 사용한다면 표현식과 for문 사이에 위치하게 된다. 언뜻 파이썬의 삼항연산자를 연상케한다.
딕셔너리 예시
key = [i for i in range(3)]
value = ['cat', 'cow', 'dog', 'pig']
{key[i]:value[i] for i in range(3)}
# {0: 'cat', 1: 'cow', 2: 'dog'}
딕셔너리는 key값과 value값이 쌍으로 존재하는 데이터 구조이다. 리스트에서는 표현식이 하나의 값으로 산정되어지는 데 반해, 딕셔너리는 ':'를 경계로 앞에는 key값, 뒤에는 value값을 입력하게 된다.
셋은 리스트와 구조가 비슷해서 생략하기로 한다.