☆IT 개발 프로그램☆/Phthon

[파이썬] 자료구조 Comprehension : 람다형 자료구조 코딩

호기심을 품고사는 중 2020. 6. 4. 15:02

comprehension 란

파이썬에서 iterator 로 매우 간단하게 배열을 만드는 방법이다. 3줄 이상 작성되는 코드를 한 줄로 줄일 수 있다.

리스트를 만드는 법을 소개한 후, 말미에 딕셔너리 작성법도 후술한다.


 

 

Syntax # list 작성법

새 리스트 = [ expression(item) for item in list if 조건절 ]

 [예시] 리스트 만들기

1) 조건문 만족하는 element 로 리스트 만들기

 

new_list = []
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

기존의 list 리스트에서 짝수만 골라내서 새 리스트에 담고 싶다고 가정해보자. 리스트 컴프리핸션을 사용하지 않으면 아래와 같이 3 줄의 코드로 작성된다.

for item in list:
    if item % 2 == 0:
        new_list.append(item)

 

하지만 리스트 컴프리핸션을 사용하면 한 줄로 리스트가 완성된다.

new_list = [i for i in list if i % 2 == 0]

 

출력 결과:


 

2) 조건문 만족하는 element 의 변형값으로 리스트 만들기

new_list = []
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

이번에는 짝수만 골라내서, 짝수의 제곱값을 새 리스트에 담고 싶다고 가정해보자.

for item in list:
    if item % 2 == 0:
        new_list.append(item ** 2)

 

리스트 컴프리핸션을 사용하면 한 줄로 리스트가 완성된다.

new_list = [i ** 2 for i in list if i % 2 == 0]

 

출력 결과:


 

3) 이중 for 문을 도는 리스트 만들기

new_list = []

 

아래의 코드는 이중 for 문을 돌린 결과물로 리스트를 만들어낸 코드이다.

for i in [10, 30, 50]:
    for j in [20, 40, 60]:
        new_list.append(i + j)

 

이중 for 문도 리스트 컴프리핸션으로 축약할 수 있다.

new_list = [x + y for x in [10, 30, 50] for y in [20, 40, 60]]

 

출력 결과:


 

 

 

Syntax # dictionary 작성법

새 딕셔너리 = { expr(key):expr(value) for key, value in dictionary.items() if 조건절 }

 

[예시] 딕셔너리 만들기

조건문 만족하는 element 로 딕셔너리(map) 만들기

 

new_dict = {}
dictionary = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

 

기존의 딕셔너리에서 3이상의 key 값을 가지는 pair만 새 딕셔너리에 담으려고 한다. 이 때 기존 코딩법은 아래와 같다.

for key, value in dictionary.items():
    if value > 2:
        new_dict.update({key: value})

 

컴프리핸션 문법으로 코딩하면 한 줄로 딕셔너리가 완성된다.

new_dict = {key: value for key, value in dictionary.items() if value > 2}

 

출력 결과: