List Comprehension과 Dict Comprehension에 대한 내용입니다.
Comprehension(이해, 이해력, 포괄, 내포, 함축)은 기본적으로 for문과 표현식의 형태를 띄고 있으며
for문과 if문, if-else문의 결합문 형태로 쓰입니다.
먼저, List Comprehension의 설명입니다.
총 3가지 문법이 존재합니다.
"""
List Comprehension
형태 : for문 + 조건문 혼합형태
용도 : 제공된 리스트를 반복해서 (리스트의 값을 끄집어냄) 조건 지정 및 임의의 연산을 적용하여
다시 리스트로 반환하는 기능.
문법 (Syntax) 1: < blog 그림 그려 넣자 (순서도) >
result = [ 표현식(연산, 변수) for 변수 in 리스트형 데이터 ]
문법 (Syntax) 2: 단일 if 문
result = [ 표현식 for 변수 in 리스트형 데이터 if 조건식 ]
문법 (Syntax) 3: if ~ else 문 (3항 연산자, 변수 = 참 실행문 if 조건식 else 거짓 실행문)
result = [ 3항 연산자 for 변수 in 리스트형 데이터 ]
result = [ 참 실행문 if 조건식 else 거짓 실행문 for 변수 in 리스트 ]
"""
# List comprehension을 사용하면 좌측의 내용을 우측처럼 한 줄로 줄일 수 있음.
# result = []
#############for문 + if문#################################List Comprehension###################
# for n in range(10): # ===> result = [ n for n in range(10) if n % 2 ==0 ] 와 같다.
# if n % 2 == 0: #
# print(n) # [0, 2, 4, 6, 8] #
# result.append(n) #
# #
# print(result) #
문법 1 : result = [ 표현식(연산, 변수) for 변수 in 리스트형 데이터 ]
"""
문법1
result = [ 표현식(연산, 변수) for 변수 in 리스트형 데이터 ]
"""
result = [ n for n in range(10)]
print("1. :", result) #1. : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
result = [ n + 1 for n in range(10)]
print("2. :", result) #2. : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = [ n >5 for n in range(10)]
print("3. :", result) #3. : [False, False, False, False, False, False, True, True, True, True]
result = [ n for n in range(10)]
print("4. :", result) #4. : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
문법 2 : result = [ 표현식 for 변수 in 리스트형 데이터 if 조건식 ]
"""
문법 2
result = [ 표현식 for 변수 in 리스트형 데이터 if 조건식 ]
"""
# 조건 : 1 ~ 10까지 반복해서 홀수값만 저장된 리스트를 출력하시오. (단, list comprehension 이용)
result = [n for n in range(1, 11) if n % 2 != 0]
result2 = [n for n in range(0, 11, 2)]
print("5. 홀수 리스트 :", result) #5. 홀수 리스트 : [1, 3, 5, 7, 9]
print("5. 짝수 리스트 : ", result2) #5. 짝수 리스트 : [0, 2, 4, 6, 8, 10]
문법3 : result = [ *3항 연산자* for 변수 in 리스트형 데이터 ]
result = [ *참 실행문 if 조건식 else 거짓 실행문* for 변수 in 리스트 ]
"""
문법 3
result = [ *3항 연산자* for 변수 in 리스트형 데이터 ]
result = [ *참 실행문 if 조건식 else 거짓 실행문* for 변수 in 리스트 ]
"""
# 조건 : 1 ~ 10까지 수 중 5보다 작은 값은 + 10하고 큰 값은 * 10을 하여 리스트로 반환하시오.
result = [ n + 10 if n < 5 else n * 10 for n in range(1, 11)]
print("6 :", result) #6 : [11, 12, 13, 14, 50, 60, 70, 80, 90, 100]
다음으로, dict Comprehension의 설명입니다.
총 3가지 문법이 존재합니다.
"""
dict Comprehension
형태 : for문 + 조건문 혼합형태
for key, value in k.items(): # [(key, value), (key, value),...] ***
print(key, value) # 변수 동시 할당이 가능해서 이렇게 쓸 수 있는 것
용도 : 제공된 딕셔너리를 반복해서 (딕셔너리의 값을 끄집어냄) 조건 지정 및 임의의 연산을 적용하여
다시 딕셔너리로 반환하는 기능.
문법 (Syntax) 1:
result = { k : v for k, v in dict.items() }
result = { k for k, v in dict.items() } ==> 결과값 set{ }으로
문법 (Syntax) 2:
result = { k : v for k, v in dict.items() if 조건식 }
문법 (Syntax) 3:
result = { 참 실행문 if 조건식 else 거짓 실행문 for k, v in dict.items() if 조건식 }
"""
문법 1 : result = { k : v for k, v in dict.items() }
result = { k for k, v in dict.items() } ==> 결과값 set{ }
"""
#1.문법 1 : result = { k : v for k, v in dict.items() }
result = { k for k, v in dict.items() } ==> 결과값 set{ }으로
"""
m_dict = {"대한민국" : "서울", "영국" : "런던", "미국" : "워싱턴", "일본" : "도쿄"}
#질문 1 : { 나라 : 수도 } ==> {수도 : 나라} 형태로 출력하시오.
result = { v : k for k, v in m_dict.items()} # 뒤집어서 표현 가능
print("{수도: 나라} 포멧으로 변경:", result)
#{수도: 나라} 포멧으로 변경: {'서울': '대한민국', '런던': '영국', '워싱턴': '미국', '도쿄': '일본'}
result2 = { k for k, v in m_dict.items()}
print(result2, type(result2))
#{'일본', '영국', '대한민국', '미국'} <class 'set'>
문법2 : result = { k : v for k, v in dict.items() if 조건식 }
#질문 : 수도 이름이 2글자인 수도만 dict로 출력하시오. { 나라 : 수도 } 포멧
result = { k : v for k, v in m_dict.items() if len(v) == 2}
print("수도 이름이 2글자인 국가: ", result)
#수도 이름이 2글자인 국가: {'대한민국': '서울', '영국': '런던', '일본': '도쿄'}
문법3 : result = { 참 실행문 if 조건식 else 거짓 실행문 for k, v in dict.items() if 조건식 }
(예제 결과가 뭔가 이상한데... 아무리해도 저렇다. 강사님이 저렇게 한거니까.. 그냥 일단 넘어감.)
"""
#3. result = { 참 실행문 if 조건식 else 거짓 실행문 for k, v in dict.items() if 조건식 }
"""
m_dict = {"대한민국" : "서울", "영국" : "런던", "미국" : "워싱턴", "일본" : "도쿄"}
result = {"우리나라" if k =="대한민국" else "남의 나라" for k, v in m_dict.items()}
result2 = {"우리나라" if "대한민국" in m_dict.keys() else "남의 나라" for k, v in m_dict.items()}
print(result) #{'남의 나라', '우리나라'}
print(result2) #{'우리나라'} # 뭔가 이상함. 다시 해보셈. 뭔가 희한해.....
"""
Generator라는 걸 안 배워서 모르겠는데 일단 설명을 해주셔서 기록.
"""
# generator # set Comprehension
1) Comprehenshion
- list comprehension
- dict comprehension
===> 한 번에 메모리에 올려서 사용한다.
2) Generator
===> 필요시 마다 메모리에 올려서 사용한다.
"""
이로써 Comprehension 설명을 마칩니다.
for와 if문을 한 문장으로 줄임으로써 정말 사용이 용이해집니다. 그냥 봐도 많이 쓰일 것 같아요.
그럼 이만~~
'SK 행복성장캠퍼스 > Python 기초' 카테고리의 다른 글
0903_4일차_함수_사용자정의함수 (0) | 2020.09.06 |
---|---|
0903_4일차_반복문_while문 (0) | 2020.09.06 |
0902_3일차_연습문제 (0) | 2020.09.06 |
0902_3일차_반복문_for문 (0) | 2020.09.06 |
0902_3일차_조건문 (0) | 2020.09.06 |
댓글