TIL #26 Python-comprehension

강경훈·2020년 8월 22일
0
post-thumbnail
post-custom-banner

Comprehension : 컴프리헨션이란 새로운 리스트너 딕셔너리를 만들 때 사용할 수 있는 간단한 표현식

  • 만들고자 하는 원소를 표현하는 표현식으로 시작하여 for 루프가 뒤에 따라오는 형식
  • For 문 뒤에 if문을 추가하여 조건문을 포함한 형식도 가능
  • list : [ 표현식 for 원소 in 반복 가능 객체]
  • dictionary: {key:value for key, value in 반복가능한 tuple}

1. list comprehension

1) 1~10을 원소를 갖는 list 만들기

  • for 문 사용
for n in range(1,11):
	my_dict.append(n)
  • comprehension 사용
my_dict =[n for n in range(1, 11)]

2) 여러 정수 원소를 input 받기

my_dict = [int(x) for x in input("입력").split()]
- input으로 받은 원소들은 split에 의해 띄어쓰기를 기준으로 나누어진 list가 되고 그 원소들은 int형 data로 my_dict의 원소가 된다.
- 위의 코드는 입력 받은 원소들이 숫자 일 때만 가능

2. if가 포함된 comprehension

1) 1~10을 원소로 갖는 list에서 짝수만 뽑기

  • for문 + if문
my_list = [1,2,3,4,5,6,7,8,9,10]
even_number = []
for num in my_list:
  if num % 2 ==0:
    even_number.append(num)
  • comprehension 사용
my_list = [1,2,3,4,5,6,7,8,9,10]
even_numbers = [num for num in my_list if num % 2 ==0]

위의 두 코드를 비교해 보면 comprehension을 사용하여 4줄짜리 코드를 1줄로 바꾸어 표현 할 수 있다.

2) S로 시작하지 않는 도시만 찾기

cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi"]

cities_new = [city for city in cities if city[0] != "S"]

3. dictionary comprehension

1) comprehension으로 dictionary 만들기

- Key는 도시 이름, value는 인구수(정수)인 딕션너리 만들기
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ( 'Shenzhen', 23300000), ('Delhi', 21753486) ]

cities_dict = {key: value for key, value in population_of_city}
- population_of_city list의 원소들은 도시 이름과 인구수가 tuple로 묶여 있다.
- for in을 통해 population_of_list의 원소를 가져오면 ('도시이름',인구수)를 차례로 가져온다.
- key, value = ('도시이름',인구수)가 되어 unpacking을 통해 key = '도시이름', value = 인구수가 된다.
- 표현식 key:value을 통해 딕션너리로 저장된다.

4. comprehension의 장단점

1) 장점

  • 복잡한 코드를 간결하게 표현 할 수 있다.
  • 일반적인 for문에 비해 처리 속도가 빠르다.
  • 간결하고 데이터베이스를 조회하여 리스트로 만들 때 많이 사용하기 때문에 리스트 컴프리 헨션은 새로운 배열을 만들때 유용

2) 단점

  • 코드를 줄여주고 처리 시간을 줄여준다고 모든 코드를 comprehension으로 작성하면 안됨
  • 복잡한 코드를 comprehension으로 표현하면 오히려 가독성이 떨어짐
  • 가독성을 위해 comprehension을 사용하지 않아야 하는 경우도 있음
profile
방랑하는 개발자
post-custom-banner

0개의 댓글