[Python] List Comprehension

eslim·2020년 8월 24일
0

Python

목록 보기
12/12
post-thumbnail

1. Python Comprehension

  • Python 2 에서는 List Comprehension (리스트 내포)만을 지원하며, Python 3 에서는 Dictionary Comprehension과 Set Comprehension을 추가로 지원하고 있다.

1-1. List Comprehension

  • List Comprehension (리스트 내포)는 입력 Sequence로부터 지정된 표현식에 따라 새로운 리스트 컬렉션을 빌드하는 것이다.
[출력표현식 for 요소 in 입력Sequence [if 조건식]]
  • for 루프를 돌며 각각의 요소를 하나씩 가져오게 되고, if 조건식이 있으면 해당 요소가 조건에 맞는지 체크하게 된다. 만약 조건에 맞으면 출력 표현식(Output Expression)에 각 요소를 대입하여 출력 결과를 얻게 된다. 이러한 과정을 모든 요소에 대해 실행하여 결과를 리스트로 리턴하게 된다.
oldlist = [1, 2, 'A', False, 3]
 
newlist = [i*i for i in oldlist if type(i)==int]
 
print(newlist)
# 출력: [1, 4, 9]
  • for 루프를 돌면 특정 조건에 있는 입력데이타를 변형하여 리스트로 출력하는 코드를 간단한 문법으로 표현한 것

1-2 Set Comprehension

  • 지정된 표현식에 따라 새로운 Set 컬렉션을 빌드하는 것으로, List Comprehension과 거의 비슷하지만, 결과가 Set {...}으로 리턴된다는 점이 다르다.
{출력표현식 for 요소 in 입력Sequence [if 조건식]}
  • 결과 Set은 중복을 허용하지 않으므로 중복된 데이타는 자연스럽게 제거된다
oldlist = [1, 1, 2, 3, 3, 4]
 
newlist = {i*i for i in oldlist}
 
print(newlist)
# 출력 : {16, 1, 9, 4}

1-3 Dictionary Comprehension

  • Set Comprehension과 거의 비슷하지만, 출력표현식이 Key:Value Pair로 표현된다는 점이 다르며, 결과로 dict 가 리턴된다.
{Key:Value for 요소 in 입력Sequence [if 조건식]}
id_name = {1: '박진수', 2: '강만진', 3: '홍수정'}
 
name_id = {val:key for key,val in id_name.items()}
 
print(name_id)
 
# 출력 : {'박진수': 1, '강만진': 2, '홍수정': 3}

Assignment1

  1. 다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.
cities = ["Tokyo", "Shanghai", "Jakarta", "Seoul", "Guangzhou", "Beijing", "Karachi", "Shenzhen", "Delhi" ]

Answer

city_list = [element for element in cities if element[0] != "S"]
print(city_list)

# result
# ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

Assignment2

  1. 다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [("Tokyo", 36923000), ("Shanghai", 34000000), ("Jakarta", 30000000), ("Seoul", 25514000), ("Guangzhou", 25000000), ("Beijing", 24900000), ("Karachi", 24300000), ("Shenzhen", 23300000), ("Delhi", 21753486)]

Answer

city_dict = {city[0]:city[1] for city in population_of_city }
print(city_dict)

0개의 댓글