본문 바로가기
SK 행복성장캠퍼스/Python 기초

0903_4일차_List/Dict Comprehension

by NickNuma 2020. 9. 6.

List ComprehensionDict 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

댓글