리스트 컴프리헨션

전창우·2024년 2월 22일
0

you know what?

목록 보기
3/3
post-thumbnail

리스트 컴프리헨션(List Comprehension)이란?
리스트를 더 직관적이고, 간결하게 표현할 수 있는 방법이다.

리스트 뿐만 아니라 튜플, 사전, 집합에도 컴프리헨션이 있으나, 그중 가장 기본이면서도 많이 사용하는 것이 리스트 컴프리헨션이라할 수 있다.

리스트 컴프리헨션이 쓰인 코드를 직관적으로 이해하는 것은 크게 어렵지 않으나, 그것을 자유자재로 활용할 수 있는 것은 다른 영역이다. 혹자는 이것으로 파이썬의 뉴비와 주니어, 시니어를 구분하기도 한다. 파이썬 코딩의 척도로도 쓰일만큼 중요한 List Comprehension에 대해 알아보자.

리스트 생성하기

기존에 배운 문법으로 0부터 9까지의 정수를 리스트로 생성하는 코드는 다음과 같다.

number=[]
for n in range(0,10,1):
	number.append(n)

이러한 코드를 컴프리헨션으로 표기하면 아래와 같이 나타낼 수 있다.

[x for x in range(10)]

리스트를 생성하는 방식은 대괄호로 생성한다는 점에서 동일하다. 하지만, 컴프리헨션은 리스트 내부에 코드를 작성한다.

컴프리헨션에서 사용한 변수 x는 for 문 내부에서 append 메서드에 인자로 넣은 변수 n과 같다. n과 마찬가지로 x는 리스트에 append될 수의 형식을 지정해준다고 보면 된다.

이때 반복문을 리스트 내부에 작성해주면 된다.

고로, 다음 코드의 출력값이 2의 구구단(1~10)이 나오게 되는 것이다.

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

조건 걸기

기존의 문법으로 1부터 10까지 숫자중 짝수만 순차적으로 들어있는 리스트를 생성하는 코드는 다음과 같다.

even_num = []
for n in range(1,11):
	if n%2 ==0:
    	even_num.append(n)

컴프리헨션에서는 if 예약어 또한 지원한다. 이때 if 키워드는 for문 다음에 위치해야 한다. 이를 바탕으로 위와 같은 출력값을 가지는 리스트 컴프리헨션을 작성해보자.

[x for x in range(1,11) if x%2 ==0]
result: [2,4,6,8,10]

중복 표현

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

for

예를들어, 저녁으로 먹을 메뉴 (쌈밥, 치킨, 피자) 중 하나와 후식으로 먹을 메뉴 (사과, 아이스크림, 커피) 중 하나를 정할 때 경우의 수를 뽑는 코드를 컴프리헨션으로 작성해보자.

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

기존의 문법으로는 이중 for문을 사용해서 작성해야하는 코드를 한 줄로 명료하게 표현할 수 있다.

단순 if 조건

if문 또한 중복하여 작성해서 여러 조건을 걸 수 있습니다.

[x for x in range(1,10,1) if x < 5 if x%2 == 0]

if-else 조건

'if-else' 조건은 리스트 컴프리헨션 내에서 각 element에 대해 두 가지 다른 표현식 중 하나를 적용하고자 할 때 사용한다.

# 예: 10 이하의 수에서 짝수는 그대로, 홀수는 음수로 변환
result = [x if x % 2 == 0 else -x for x in range(1,11)]

이 예에서 x if x % 2 == 0 else -x는 각 x에 대해 x가 짝수이면 x를 그대로 반환하고, 홀수이면 -x를 반환하게 된다.

표현식

리스트 컴프리헨션에 반복문과 조건문만이 쓰인다고 착각해서는 안된다. 리스트의 표현식(위에서는 x)에 다양한 함수를 적용시킴으로써 리스트 컴프리헨션 내부에 다양한 함수가 쓰일 수도 있다.

def some_func(x):
	x= int(x)+10
    return x
   
list = [func(i) for i in range(5)]

마치며

List comprehension을 처음 접하고, 사용할 때는 적응하기 어렵울 지도 모른다. 하지만, 파이썬의 꽃이라 불리는 리스트 컴프리헨션에 익숙해질수록 더 직관적인 코드를 작성해 나갈 수 있을 것이라 의심치 않는다.

0개의 댓글