[Python]list comprehensions

Jimin_Note·2022년 5월 27일
0

[Python]

목록 보기
23/34

📍예제1

#첫 글자가 'S'인 도시는 제외시키기
cities =["Tokyo","Shanghai","Jakarta","Seoul","Guangzhou","Beijing","Karachi","Shenzhen","Delhi"]
a=[]
for i in range(len(cities)) :
 if cities[i][0]!='S':
  a.append(cities[i])
  
print(a)   #['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

위 코드를 컴프리헨션으로 표기하기

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


print([cities[i] for i in range(len(cities)) if (cities[i][0]!='S')]) #['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

📍예제2

#다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 작성해 보세요.

population_of_city = [('Tokyo',36923000),('Shanghai',34000000),('Jakarta',30000000),('Seoul',25514000),('Guangzhou',25000000),(
  'Beijing',24900000),('Karachi',24300000), ('Shenzhen',23300000),('Delhi',21753486)]

a={}

for x in range(len(population_of_city)):
   a.update({population_of_city[x][0]:population_of_city[x][1]})
print(a)

위 코드를 컴프리헨션으로 표기하기

population_of_city = [('Tokyo',36923000),('Shanghai',34000000),('Jakarta',30000000),('Seoul',25514000),('Guangzhou',25000000),(
  'Beijing',24900000),('Karachi',24300000), ('Shenzhen',23300000),('Delhi',21753486)]

print({population_of_city[x][0]:population_of_city[x][1] for x in range(len(population_of_city))})

이중for문(if문도 중복가능)

컴프리헨션을 이용하여 식사메뉴(토마토라면,치킨,쌀국수) 1개와 사이드메뉴(새우고로케,골뱅이소면,분짜) 1개씩 고르는 모든 경우의 수 출력하기

print([(x,y) for x in ['토마토라면','치킨','쌀국수'] for y in ['새우고로케','골뱅이소면','분짜']])

'''
결과 : [('토마토라면', '새우고로케'), ('토마토라면', '골뱅이소면'), ('토마토라면', '분짜'), ('치킨', '새우고로케'), ('치킨', '골뱅이소면'), ('치킨', '분짜'), ('쌀국수', '새우고로케'), ('쌀국수', '골뱅이소면'), ('쌀국수', '분짜')]
'''

장점

  • 간단한 컴프리헨션은 다른 dict, list 또는 set 생성 기술보다 더 명확하고 간단할 수 있다.
  • Generator는 목록 생성을 완전히 피하므로 매우 효율적일 수 있다.
  • 일반 for loop에 비해 실행시간이 짧다.

단점

복잡한 이해 또는 Generator는 읽기 어려울 수 있다..

결론

  • 간단한 경우에 사용하기 좋습니다.
  • for각 부분은 매핑 표현식, 절, 필터 표현식 과 같은 한 줄에 맞아야 한다.
  • 너무 복잡한 코드라면 loop를 사용하자

    개인적으로 주의해야할 부분

    print( )안에 컴프리헨션으로 표기할때 꼭 ! 리스트 [ ],딕셔너리 { } 등 괄호 신경쓰기
print([x for x in range(10)])
print({(x,y) for x in range(10) for y in range(10)})
profile
Hello. I'm jimin:)

0개의 댓글