데이터 꿈나무

[Python] 리스트 컴프리헨션(List Comprension) 문법 본문

Language/Python

[Python] 리스트 컴프리헨션(List Comprension) 문법

ye_ju 2023. 2. 18. 18:11

 

안녕하세요. 이번 포스팅은 제가 프로그래머스 문제를 풀어보다가 발견한 문법을 하나 소개시켜드리려고 해요~!

바로 '리스트 컴프리헨션(List Comprension)'이라는 문법인데요, 바로 시작해볼게요!


 

📌리스트 컴프리헨션(List Comprension) 이란?

 

컴프리헨션은 파이썬의 자료구조(list, dictionary, set)에 데이터를 좀 더 쉽고 간결하게 담기 위한 문법입니다.

반복문과 조건문을 결합하여 하나의 구문으로 만들어 담을 수 있는 형태입니다.

처음에는 낯선 생김새에 당황하실 수 있지만, 익숙해지면 정말 편한 문법입니다.

 

📌예제와 함께 살펴보기

 

리스트에 순차적으로 1부터 10까지의 값을 저장하고 싶을 때, 가장 단순한 방법으로 빈 리스트를 만들고 append 함수로 하나씩 추가하는 방법이 있습니다.

data = []
for i in rnage(1, 11):
	data.append(i)

하지만 이 방법은 저장해야 하는 데이터의 수가 늘어나는 비효율적인 방법이 됩니다.

만약 1부터 10만까지의 수를 저장해야 한다면 append를 10만번 써야하기 때문입니다.

 

리스트 컴프리헨션을 이용하면 아래의 코드처럼 한줄처리가 가능합니다.

data = [i for i in range(1, 11)]

첫 번째 i는 리스트에 저장되는 값이고 두 번째 i는 for문의 일부입니다. 그리고 전체를 대괄호로 감싸준 것을 볼 수 있습니다.

 

📌for문과 if문 함께 사용하기

 

리스트 컴프리헨션은 for문 뿐만 아니라 if문도 함께 사용할 수 있습니다.

위의 리스트에서 짝수 값만 저장하고 싶다고 해봅시다. 

일반 for문으로 표현하면 아래와 같습니다.

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

조건문 if가 추가되니 조금씩 코드가 길어지는 것을 볼 수 있습니다. 

하지만 리스트 컴프리헨션을 사용한다면 아래와 같이 코드를 한줄로 표현할 수 있습니다.

data = [i for i in range(1, 11) if i % 2 == 0]

 

또한 중첩 if문도 사용할 수 있습니다.

data = [i for i in range(1, 11) if i % 2 == 0 if i < 5]

 

중첩 for문도 가능합니다.

data = [(x, y) for x in range(1, 6) for y in range(1, 4)]

# for문과 비교해봅시다.
data2 = []
for i in range(1, 6):
    for j in range(1, 4):
        data2.append((i, j))

# 출력결과
[(1, 1), (1, 2), (1, 3), 
(2, 1), (2, 2), (2, 3), 
(3, 1), (3, 2), (3, 3), 
(4, 1), (4, 2), (4, 3), 
(5, 1), (5, 2), (5, 3)]

 

 

📌딕셔너리 컴프리헨션

 

딕셔너리 컴프리헨션 또한 기본적인 사용법은 리스트 컴프리헨션과 동일합니다.

다만 딕셔너리 자체가 키:값으로 이루어진 자료구조인 만큼 약간의 차이가 있습니다.

 

1부터 5까지를 key로 정하고 key * 2를 값으로 가지는 딕셔너리를 생성하는 코드를 짜보았습니다.

data = {i : i*2 for i in range(1, 6)}

# 출력결과
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10}

for문 앞에 키:값을 적는다는 것과 대괄호가 중괄호로 바뀐 것만 유의하시면 됩니다.

 

 

 

📌셋 컴프리헨션

 

셋 컴프리헨션은 딕셔너리 컴프리헨션과 비슷합니다.

다만 셋은 키:값 형태가 아니기 때문에 그 부분만 유의하시면 됩니다.

data = {i for i in range(1, 11)}

# 출력결과
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

참고로 셋 자료구조는 중복값을 저장하지 않는다는 점만 기억해두시면 되겠습니다.

 

 


지금까지 컴프리헨션 문법에 대해서 살펴보았습니다. 많은 도움이 되셨으면 좋겠습니다!

직접 사용해보시면서 익숙해지시는 것을 추천드려요~

그럼 이번 포스팅은 여기에서 마치도록 하겠습니다. 감사합니다.

Comments