데이터 꿈나무
[Python] 리스트 컴프리헨션(List Comprension) 문법 본문

안녕하세요. 이번 포스팅은 제가 프로그래머스 문제를 풀어보다가 발견한 문법을 하나 소개시켜드리려고 해요~!
바로 '리스트 컴프리헨션(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}
참고로 셋 자료구조는 중복값을 저장하지 않는다는 점만 기억해두시면 되겠습니다.
지금까지 컴프리헨션 문법에 대해서 살펴보았습니다. 많은 도움이 되셨으면 좋겠습니다!
직접 사용해보시면서 익숙해지시는 것을 추천드려요~
그럼 이번 포스팅은 여기에서 마치도록 하겠습니다. 감사합니다.
'Language > Python' 카테고리의 다른 글
| [Python] 파이썬 sort, sorted 차이 (0) | 2023.02.26 |
|---|---|
| [Python] set 자료형 - 교집합, 합집합, 차집합 (0) | 2023.02.18 |
| [Python] 파이썬 join 함수 정리 (문자열 합치기) (0) | 2023.02.14 |
| [Python] 문자열에서 특정 문자 개수 세기(count) (0) | 2023.02.07 |
| [Python] 문자열(str)에서 특정 문자열 포함 유무 확인하기 (0) | 2023.02.07 |