파이썬은 컴프리헨션이라는 문법을 지원한다.
컴프리헨션을 이용하면 list, dict, set을 좀 더 간단한 방법으로 작성할 수 있다.
리스트 컴프리헨션
리스트 컴프리헨션의 작성법은 아래와 같다.
num = [x for x in range(10)]
위의 컴프리헨션문을 for문으로 표기하면 아래와 같다.
num = []
for x in range(10):
num.append(x)
append(x)를 대신하여 컴프리헨션문에서는 for문 앞에 변수명만 적어주면 된다.
컴프리헨션문 내에서 if문과 다중 for문도 사용이 가능하다.(if문도 여러개 사용 가능)
num = [x for x in range(10) if x%2==0] #if문을 이용하여 짝수만 저장
print(num)
>>[0, 2, 4, 6, 8]
다중 for문 작성법(왼쪽 for문이 먼저 작동한다.)
num=[[x,y] for x in [1,2,3] for y in [4,5,6]]
print(num)
>>[[1, 4], [1, 5], [1, 6], [2, 4], [2, 5], [2, 6], [3, 4], [3, 5], [3, 6]]
셋 컴프리헨션
위 리스트 컴프리헨션의 대괄호[]만 중괄호{}로 바꿔주면된다. 내부 코드 작성법은 동일.
딕셔너리 컴프리헨션
컴프리헨션문을 중괄호{}로 감싸고 key:value의 형태로 내용을 채우면 딕셔너리의 생성이 가능하다.
li = ['A','B','C']
di = {x:0 for x in li} #value는 0
print(di)
>>{'A': 0, 'B': 0, 'C': 0}
컴프리헨션을 이용하여 기존 딕셔너리를 새롭게 변경할 수도 있다.
old={'A':10,'B':10,'C':20,'D':10}
new={k:v for k,v in old.items() if v!=20} #items메소드를 이용해 old에서 key와 value를 가져옴
print(new)
>>{'A': 10, 'B': 10, 'D': 10} #if문을 이용해 20이라는 value를 가진 key 제거
튜플 컴프리헨션
위의 방법대로라면 소괄호()를 사용하여 튜플 컴프리헨션을 작성할 수 있을 것 같다.
num = (x for x in range(10))
print(num)
>><generator object <genexpr> at 0x00000220CCDD4AC8>
하지만 생각과 달리 generator(제너레이터)가 생성된다.
제너레이터에 대해서는 다음 글에서 설명하겠다.
'Python' 카테고리의 다른 글
Python - 제너레이터(Generator) (0) | 2020.08.25 |
---|---|
Python - 람다함수(익명함수) (0) | 2020.08.24 |
Python - 전역 변수, 지역 변수 (0) | 2020.08.23 |
Python - mutable객체, immutable객체 (0) | 2020.08.22 |
Python - 빠른 입력 (0) | 2020.08.17 |