Comprehension
실제 프로그래밍에서 한 줄로 파이썬 기능을 구현할 수 있는 기능이다.
장점: 코드 간소화를 위해 사용, 직관적이며 빠른 속도
단점: 조건이 복잡해 지는 경우 직관성 떨어지고, 메모리 사용량이 증가 하여 사용 어려움
리스트 컴프리헨션
예제 1
리스트속의 숫자를 제곱한 값을 리스트로 도출시키기
'''일반 for문 '''
numbers = [1, 2, 3, 4]
squares = []
for n in numbers:
squares.append(n**2)
print(squares)
''' Comprehension 사용 '''
numbers = [1, 2, 3, 4]
squares = [n**2 for n in numbers] #리스트 안에 for문을 축약해 작성함.
print(squares)
[1, 4, 9, 16]
예제 2
두개의 1차 행렬 리스트사이에 중첩되는 숫자만 표시만 리스트로 도출하기
list_a = [1, 2, 3, 4]
list_b = [2, 3, 4, 5]
'''일반 for 중첩문'''
common_num = []
for a in list_a:
for b in list_b:
if a == b:
common_num.append(a)
print(common_num)
'''Comprehension으로 만든 for 중첩문'''
common_num = [a for a in list_a for b in list_b if a==b]
print(common_num)
[2, 3, 4]
딕셔너리 컴프리헨션
예제 3
딕셔너리 컴프리헨션의 기본 예
test딕셔너리의 각 아이템을 선언한후 key값(na)이 E와 같지 않으면 출력하라.
# 딕셔너리 컴프리헨션
test = {'A': 5, 'B': 7, 'C': 9, 'D': 6, 'E': 10}
test = {na:test for na,test in test.items() if na != 'E'}
print(test)
{'A': 5, 'B': 7, 'C': 9, 'D': 6}
예제 4
딕셔너리의 value값을 조건에 맞춰서 변경하여 저장
''' 아래와 같이 조건을 반복문 대신 조건을 먼저 쓸 수 있다.
조건을 위해 if를 사용하는 경우 else를 작성해줘야된다.'''
numberss = {'A': 5, 'B': 7, 'C': 9, 'D': 6, 'E': 10}
pas = {name: 'PASS' if numbers > 8 else 'NO PASS' for name, numbers in numberss.items()}
# nameL'Pass로 표시해라 만약 value값이 8보다 크면 else일경우 'NO PASS'로 표시,key값은 name 이고 value는 numbers이다
print(pas)
{'A': 'NO PASS', 'B': 'NO PASS', 'C': 'PASS', 'D': 'NO PASS', 'E': 'PASS'}
리스트와 딕셔너리 혼합 컴프리헨션
예제 5
1부터 6전까지의 숫자를 6전까지의 수만큼 나열하는 반복문의 차이
[] 는 반복 리스트
{} 는 set 로 중복값을 제외
''' 아래처럼 반복문을 연속으로 작성가능하다.
set은 특성상 중복값을 제외한다.'''
print('list for loop : ',[n for n in range(1, 5+1) for n in range(1, 5+1)])
print('set for loop : ',{n for n in range(1, 5+1) for n in range(1, 5+1)})
list for loop : [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
set for loop : {1, 2, 3, 4, 5}
예제 6
zip모듈을 사용해서 두개의 리스트를 하나의 딕셔너리로 합치기
'''두개의 리스트를 하나의 딕셔너리로 합침.
하나는 key, 또 다른 하나는 value로 사용한다'''
subjects = ['math', 'history', 'english', 'computer engineering']
scores = [90, 80, 95, 100]
score_dict = {key: value for key, value in zip(subjects, scores)}
print(score_dict)
{'math': 90, 'history': 80, 'english': 95, 'computer engineering': 100}
예제 7
리스트 속에 있는 튜플을 딕셔너리 형태로 추출
# 튜플 리스트를 딕셔너리 형태로 변환
score_tuples = [('math', 90), ('history', 80), ('english', 95), ('computer engineering', 100)]
score_dict = {t[0]: t[1] for t in score_tuples}
print(score_dict)
{'math': 90, 'history': 80, 'english': 95, 'computer engineering': 100}
PLUS...
행렬의 리스트 컴프리헨션의 이해
https://whatisthenext.tistory.com/110
'Computer Science' 카테고리의 다른 글
[Computer Science] 리팩토링과 최적화 -Refactoring, Data Optimization (0) | 2021.09.22 |
---|---|
[Computer Science] 예외처리(exception handling) - if ~else / try~except (0) | 2021.09.22 |
[Computer Science] 변수설계 - 지역변수와 전역변수 (0) | 2021.09.21 |
[Computer Science] OOP 개념을 활용하여 코드설계 (0) | 2021.09.14 |
[Computer Science] 파이썬 with OOP(Object-Oriented Programming) (0) | 2021.09.13 |