본문 바로가기
wecode/TIL 정리

위코드 Pre Course - 파이썬의 Comprehension

by 왕거 2020. 7. 24.

이전에 봤었던 한줄로 여러 조건을 사용해서 객체를 만드는 것의 정체였다.

 

Comprehension

  • 컴프리헨션이라고 표현한다.
    • <표현식> + <for> + <원소> + <반복 가능한 객체>
    • <표현식> + <for> + <원소> + <반복 가능한 객체> + <조건식>
# Comprehension 예제
example_list = [ i for i in range(1,15)]
print(example_list)

################################################
# 실행 결과
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
  • 세트, 리스트, 딕셔너리를 생성할 때 조건으로 사용할 수 있다.
  • 어떤 자료를 사용하여 새로운 기준을 가진 데이터 모음을 만들 때 특히 유용하다.
  • 절대로 만능이 아니다! 장단점을 확실하게 알고 사용하자.
    • 장점
      • 간단하게 표현된 컴프리헨션은 다른 방법들에 비해서 쉽고 간단하게 사용할 수 있다.
      • 전통적인 반복문이나 map(), filter(), lambda()를 사용하지 않아도 간결하게 컨테이너 유형 및 반복자를 생성할 수 있다.
    • 단점
      • 복잡한 컴프리헨션은 해당 코드를 이해하기 어렵게한다.

전통적인 방법과 Comprehension의 비교

# 같은 작동을 하는 코드의 두가지 형태
odd_numbers = [ ]
for element in range(1,11):
    if (element % 2) == 1:
        odd_numbers.append(element)
        
#######################################

list_comprehension = [ element for element in range(1,11) if (element % 2) == 1 ]

#######################################
  • 위에서 볼 수 있듯이 더 깔끔한 코드를 만들 수 있으나 너무 길고 복잡해지지 않게 조절해야 한다.

 

Assignment

#Comprehension.py
# Assignment 1 list
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi"]
# Assignment 2 dictionary
population_of_city = [("Tokyo", 36923000), ("Shanghai", 34000000), ("Jakarta", 30000000), ("Seoul", 25514000), ("Guangzhou", 25000000), ("Beijing", 24900000), ("Karachi", 24300000), ("Shenzhen", 23300000), ("Delhi", 21753486)]



# Asignment 1 - list : S자로 시작하지 않는 도시의 리스트 생성
after_cities = [ index for index in cities if index.find('S') != 0]
# Asignment 2 - dictionary : 도시 이름을 키로, 인구수를 값으로 하는 딕셔너리 생성
population_check = {city : pop for city, pop in population_of_city}

#################################################################################
#실행 결과
['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']
{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}

 

관련 참고 페이지 - https://google.github.io/styleguide/pyguide#273-cons