맞춤형 플랫폼 개발 도전기 (웹개발, 딥러닝, 블록체인)

Python Basic 4 (Comprehension) 본문

코딩

Python Basic 4 (Comprehension)

경이가 꿈꾸는 플랫폼 개발 2021. 11. 3. 00:27

Comprehension은 Python의 특징적인 구문이다.

List Comprehension  →  list 안에 포함된 for문  → list 생성
Dict Comprehension  →  dict 안에 포함된 for문 → dict 생성
Set Comprehension →  set 안에 포함된 for문 → set 생성

 

기본적으로 [ i for i in range(num) ] 형태로 많이 쓰인다.

[ num*10 for num in range(10) ]

# [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

조건을 붙여서  [ i for i in range(num) if 조건문 ] 형태로 만들 수도 있다.

else가 들어가야 한다면 [ i if 조건문 else 조건문 for i in iterable ]

a = [1, 2, 3, 4]
[ 3*i for i in a if i%2==0 ]

# [6, 12]

[ num * 3 if num % 2 == 0 else num for num in a ]

# [1, 6, 3, 12]

두 개의 변수를 같이 이중으로 Comprehension으로 돌린다면

[ i*j for i in range(num) for j in range(num) ] 형태로 for 을 2번 쓴다.

[
    f'{j}-{i}'
    for j in range(2, 10, 2)    # 2, 4, 6, 8
    for i in range(1, 10, 2)    # 1, 3, 5, 7, 9
]

# ['2-1',
#  '2-3',
#  '2-5',
#  '2-7',
#  '2-9',
#  '4-1',
#  '4-3',
#  '4-5',
#  '4-7',
#  '4-9',
#  '6-1',
#  '6-3',
#  '6-5',
#  '6-7',
#  '6-9',
#  '8-1',
#  '8-3',
#  '8-5',
#  '8-7',
#  '8-9']

Set, Dictionary Comprehension 도 가능하다. 

각 특성에 맞게 Set은 중복되지 않게 만들고 싶을 때, Dictionary는 key와 value에 관계성이 있을 때 많이 쓰인다.

[ num%3 for num in range(10) ]
{ num%3 for num in range(10) }

# [0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
# {0, 1, 2}

{ n : n**2 for n in range(10) }
{ x:list(range(x)) for x in range(5) }

for key,value in data.items():
    print(key, value, end = ", " )
    
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
# {0: [], 1: [0], 2: [0, 1], 3: [0, 1, 2], 4: [0, 1, 2, 3]}
# 1 one, 2 two, 3 three

 

Comments