본문 바로가기
프로그래밍/Python 관련 정보

[Python Programming 기초] Comprehension

by 물박사의 저장공간 2024. 10. 22.

 

python을 python답게 코딩할 수 있는 comprehension을 자주 사용하면 좋겠죠?

이번 포스팅에서는 간단하게 Comprehension을 사용하는 팁에 대해서 알아보겠습니다. 

1) 다수의 생성식 활용 : 아래와 같이 여러 변수에 대해서 comprehension을 적용할 수 있습니다. 이 때에는 앞에 있는 "생성식"이 더 상위루프로 간주됩니다. 

r = ((y, x) for y in range(3) if not y%2 for x in range(3) if x%2)

 

2) 다차원 container 생성 : 아래 코드에서 이중 리스트를 만드는 예시처럼 comprehension을 활용하면 다차원 container를 만들 수 있습니다. 

tt=[[1,2] for i in range(2)]
print(tt) #[[1, 2], [1, 2]]

 

3) 조건절에서 if/else 사용하는 경우: 사실 저도 종종 헷갈리는 syntax입니다. [조건만족시출력내용 if 조건 else 조건불만족시출력내용 for루프] 의 syntax를 적어주시면 됩니다. 예시로 보시는 것이 더 간단할 것 같습니다. 

[i**2 if i % 2 == 0 else i*3 for i in range(10)]

 


Dictionary에서도 마찬가지로 Comprehension을 사용할 수 있습니다. 

 

data = {'a': 1, 'b': 2, 'c': 1, 'd': 3}

# 값이 1인 딕셔너리만 추출
filtered = {k: v for k, v in data.items() if v == 1}

print(filtered)  # {'a': 1, 'c': 1}
[{k: v} for k, v in data.items() if v == 1] # 아님 주의 comprehension으로 그냥 ,만 생략. 나머지는 원래 데이터타입과 동일

 

그냥 key, value 튜플 쌍으로 가져오고 싶으면 아래처럼 해도 됩니다. 

filtered_list = [(k, v) for k, v in data.items() if v == 1]

print(filtered_list)  # [('a', 1), ('c', 1)]

 

특히 이 경우는 filtered = dict(filtered_list) 명령어로 다시 Dictionary로 돌릴 수 있습니다.