IT

컴프리헨션(comprehension)

rimicode 2022. 6. 18. 18:55
728x90
반응형
SMALL

프로그래밍은 특정 상황을 해결하는 것

컴프리헨션은 실제 프로그래밍에서 한 줄로 파이썬 기능을 구현할 수 있는 기능

  • 코드간소화를 위해 사용되고 직관적이며 속도가 빠름

 

컴프리헨션 활용시 유의할 점

1. 컴프리헨션 내 여러 조건이 중첩되는 경우 가독성이 떨어진다.

2. 조건문에 따라 컴퓨터에서 사용되는 메모리에 영향을 줄 수 있다.

numbers = [0, 1, 2, 3]
squares = []

for n in numbers:
  squares.append(n**2)

print(squares)

# [0, 1, 4, 9]
numbers = [0, 1, 2, 3]
squares = [n**2 for n in numbers]

print(squares)

# [0, 1, 4, 9]
list_1 = [1, 2, 3, 4]
list_2 = [3, 4, 5, 6]

common_num = []

for a in list_1:
  for b in list_2:
    if a == b:
      common_num.append(a)

print(common_num)

# [3, 4]
list_1 = [1, 2, 3, 4]
list_2 = [3, 4, 5, 6]

common_num = [a for a in list_1 for b in list_2 if a == b]

print(common_num)

# [3, 4]

딕셔너리 컴프리헨션

test = {'A': 1, 'B': 3, 'C': 5, 'D':7, 'E':10}

test = {na:test for na, test in test.items() if na != 'E'}
print(test)

# {'A': 1, 'B': 3, 'C': 5, 'D': 7}

 

반복문 대신 조건을 먼저 쓸 수 있음

if 를 사용하는 경우 else 를 작성

numbers = {'A': 2, 'B': 22, 'C': 6, 'D': 7}
pas = {name: 'PASS' if numbers > 8 else 'NO PASS' for name, numbers in numbers.items()}
print(pas)

# {'A': 'NO PASS', 'B': 'PASS', 'C': 'NO PASS', 'D': 'NO PASS'}

 

반복문을 연속으로 작성하는 것도 가능

set 는 특성상 중복값을 제외

print('list for loop: ', [n for n in range(1, 3+1) for n in range(1, 3+1)])
print('set for loop: ', {n for n in range(1, 3+1) for n in range(1, 3+1)})


# list for loop:  [1, 2, 3, 1, 2, 3, 1, 2, 3]
# set for loop:  {1, 2, 3}

 

두 개의 리스트를 하나의 딕셔너리로 합쳐서 하나는 key, 또 다른 하나는 value 로 사용

subjects = ['A', 'B', 'C', 'D']
scores = [20, 22, 60, 70]
score_dict = {key: value for key, value in zip(subjects, scores)}
print(score_dict)

# {'A': 20, 'B': 22, 'C': 60, 'D': 70}

 

튜플 리스트를 딕셔너리 형태로 변환

score_tuples = [('A', 55), ('B', 53), ('C', 17), ('D', 33)]
score_dict = {t[0]: t[1] for t in score_tuples}
print(score_dict)

# {'A': 55, 'B': 53, 'C': 17, 'D': 33}
728x90
반응형
LIST

'IT' 카테고리의 다른 글

백준 파이썬 2557 - Hello World  (0) 2022.06.20
데이터 모델 이해  (0) 2022.06.19
오라클 환경 세팅 방법  (0) 2022.06.17
파이썬 프로그래밍  (0) 2022.06.16
컴퓨터 공학과 머신러닝  (0) 2022.06.15