본문 바로가기
Language/Python

[Python] 컴프리헨션

by 며루치꽃 2021. 7. 8.

1부터 10까지 정수를 순서대로 가지고 있는 리스트를 생성하는 코드는 다음과 같습니다.

 

numbers = []
for n in range(1, 10+1):
	numbers.append(n)

위의 표현을 내부에 수식을 작성해서 리스트 내부에 코드를 작성하는 것을 컴프리헨션이라고 합니다.

 

[x for x in range(10)]

리스트를 생성하는 방식은 대괄호([])를 통해 생성하는 방법은 동일합니다. 차이점은 컴프리헨션은 리스트 내부에 코드를 작성한다는 점입니다. 만약 딕셔너리 컴프리헨션 또는 셋 컴프리헨션 문법을 사용할때는 대괄호를 사용합니다.

 

반복문은 별도로 작성하지 않고 리스트 컴프리헨션은 리스트 내부에 작성하여 반복합니다. 

 

리스트 컴프리헨션은 for문에서 반복되는 변수를 콜론(:)다음에 줄을 바꿔 들여쓰기하는것이 아니라, for문앞에 작성합니다. 컴프리헨션에서 사용한 x는 for문 내부에서 append메소드에 인자로 넣은 변수 n과 같습니다. 

 

리스트 컴프리헨션에서는 조건문도 가능합니다.

 

만약 2의 배수를 10개 가지고 있는 리스트를 컴프리헨션을 사용해서 만들면 다음과 같습니다

[2 * x for x in range(1, 10 + 1)]
>>> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

 

컴프리헨션 문법을 통한 방법 

컴프리헨션은 if 키워드를 지원합니다. 이 때 if키워드는 for문 다음에 위치해야합니다. 짝수를 담는 리스트 컴프리헨션은 다음과 같이 작성할 수 있습니다. 

 

[ x for x in range(1, 10+1) if x % 2 == 0]
>>> [2, 4, 6, 8, 10]

중복 표현

 

컴프리헨션은 내부에서 for 키워드와 if 키워드를 반복할 수 있습니다.

 

[ (x, y) for x in ['쌈밥', '치킨', '피자'] for y in ['사과', '아이스크림', '커피']]
>>> 
[('쌈밥', '사과'),
 ('쌈밥', '아이스크림'),
 ('쌈밥', '커피'),
 ('치킨', '사과'),
 ('치킨', '아이스크림'),
 ('치킨', '커피'),
 ('피자', '사과'),
 ('피자', '아이스크림'),
 ('피자', '커피')]

이 경우, for문은 왼쪽에 있는 for문부터 작동하게되고 그 후 뒤에 있는 for문이 작동하게 됩니다. 

 

  • 참고

- https://wikidocs.net/22805 

댓글