안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
오늘은 파이썬의 장점인 간략한 코딩을 더욱 극대화하는 리스트 컴프리헨션에 대해서 공부해보겠습니다.
1. 리스트 컴프리헨션이란?
먼저 리스트 컴프리헨션(List Comprehension)의 의미를 알아봅시다.
리스트 컴프리헨션이란 '리스트 안에 표현식(계산식)과 for문, if문을 한줄에 넣어서 새로운 리스트를 만드는 것'을 말합니다.
# 일반적인 리스트 컴프리헨션
표현식(변수명이 포함되어 있음) for 변수명 in 기존 리스트
# if가 추가되어 필터링이 추가된 리스트 컴프리헨션
표현식(변수명이 포함되어 있음) for 변수명 in 기존 리스트 if 조건문
여기서 리스트라는 말이 들어가서 리스트만 사용할 수 있을 것 같지만, 앞서 배웠던 리스트(list), 튜플(tuple), 딕셔너리(dictionary), 셋트(set) 등의 컨테이너들도 모두 사용가능하답니다.
또한 표현식엔 수식 뿐만 아니라 함수도 사용 가능한 점도 알고 계시면 훨씬 더 간단한 코딩이 가능하답니다.
2. 리스트 컴프리헨션 사용법
간단한 예시를 통해서 리스트 컴프리헨션과 친해져 봅시다.
아래와 같은 리스트가 있습니다.
my_list = [0, 1, 2, 3]
이렇게 선언한 리스트 혹은 웹 크롤링을 통해서 받은 요소가 엄청 많은 리스트에 하나하나 어떤 처리를 하고 싶을 땐, 보통 이렇게 코딩을 하곤합니다.
# step1.처리(계산) 결과를 담을 새로운 리스트 선언
new_list = []
# step2.for문을 이용해서 계산을 수행하고, append()함수로 결과값을 새로운 리스트에 붙여넣기
for i in my_list:
new_list.append(10*i)
결과를 확인해보면 아래와 같죠.
print(new_list)
>>> [0, 10, 20, 30]
리스트 컴프리헨션을 적용하면 단 한줄로 같은 결과를 낼 수 있답니다.
기존 코드와 비교하시면서 어떻게 3줄의 코드가 1줄의 코드로 바뀌었는지 꼭 이해하고 넘어가주세요.
new_list = [10*i for i in my_list]
3. 리스트 컴프리헨션(필터링) 사용법
앞서 언급하였 듯이 리스트 컴프리헨션에는 if문도 적용 가능합니다.
if문은 물론 if-else문도 사용 가능하답니다.
여기서 주의하실 점은 if문은 for문의 오른쪽, if-else문은 for문의 왼쪽에 사용한다는 점입니다.
<if문 사용 리스트 컴프리헨션 예시>
a = [1,2,3,4,5,6,7,8,9,10]
b = [i for i in a if i%2==0]
# if 조건을 and/or로 두 개 이상 쓸 수 있음
c = [i for i in a if i%2==0 and i%3==0]
print(b)
>>> [2, 4, 6, 8, 10]
print(c)
>>> [6]
<if-else문 사용 리스트 컴프리헨션 예시>
a = [1,2,3,4,5,6,7,8,9,10]
b = [i if i%2==0 else '홀수' for i in a ]
print(b)
>>> ['홀수', 2, '홀수', 4, '홀수', 6, '홀수', 8, '홀수', 10]
<if-else문 응용_ elif문 구현>
이해를 돕기 위한 if, elif, else 구문
a=[1,2,3,4,5,6,7,8,9,10,11]
b = [i if i%2==0 else '홀수' if i<10 else '홀수 중에 10 이상' for i in a ]
print(b)
>>> ['홀수', 2, '홀수', 4, '홀수', 6, '홀수', 8, '홀수', 10, '홀수 중에 10 이상']
오늘 준비한 내용은 여기까지입니다.
오늘도 공부하시느라 고생 많으셨습니다.
이 글이 도움이 되셨다면, 아래의 광고를 한 번씩만 눌러주시면 너무너무 감사하겠습니다!
'파이썬 기초 > 중급 문법' 카테고리의 다른 글
[파이썬 중급 문법] 리스트를 요소별로 묶어서 새로운 리스트 or 딕셔너리로 만드는 법(ft. zip 함수 사용법) (2) | 2022.01.16 |
---|---|
[파이썬 중급 문법] for 문 안에서 리스트 내포를 사용할 때 주의할 점 (3) | 2022.01.12 |
[파이썬 중급 문법] 클래스(class) 총정리 2편_ 초기화, 상속, 메소드 오버라이딩, 클래스 변수, 인스턴스 변수 (4) | 2021.05.03 |
[파이썬 중급 문법] 클래스(class) 총정리 1편_객체,속성,메소드,인스턴스 (6) | 2021.05.02 |