[1] Comprehension이란?
파이썬의 자료구조에 데이터를 좀 더 효율적이고 간결하게 표현하기 위한 문법
[2] List Comprehension
1) 작성 방법
[표현식 for 항목 in 반복가능객체 if 조건문]
- 기존의 For 반복문을 이용한 방법과 List Comprehension을 이용한 방법의 차이
>>>
# 기존
ls = []
for i in range(1, 5):
ls.append(i)
print(ls)
# list comprehension
ls = [i for i in range(1, 5)]
print(ls)
# Output
[1, 2, 3, 4]
- 표현식과 조건문을 추가하여 사용 가능
>>>
# 기존
ls = []
for i in range(1, 5):
if i % 2 == 0:
ls.append(i * 4)
print(ls)
# list comprehension
ls = [i * 4 for i in range(1, 5) if i % 2 == 0]
print(ls)
# Output
[8, 16]
2) For문을 여러 개 사용하는 것도 가능
[표현식 for 항목1 in 반복가능객체1 if 조건문1
for 항목2 in 반복가능객체2 if 조건문2
...
]
- 구구단
>>>
# 기존
gugudan = []
for i in range(2, 10):
for j in range(1, 10):
gugudan.append(i*j)
print(gugudan)
# list comprehension
gugudan = [i * j for i in range(2, 10) for j in range(1, 10)]
print(gugudan)
# Output
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
[3] Dictionary Comprehension
1) 작성 방법
- 기존의 For 반복문을 이용한 방법과 List Comprehension을 이용한 방법의 차이
>>>
# 기존
names = ['Merry', 'John', 'Chris']
num = [1, 2, 3]
dic = {}
for i in range(len(names)):
dic[names[i]] = num[i]
print(dic)
# dict comprehension
names = ['Merry', 'John', 'Chris']
num = [1, 2, 3]
dic = {names[i]:num[i] for i in range(len(names))}
print(dic)
# 기존 (zip)
names = ['Merry', 'John', 'Chris']
num = [1, 2, 3]
dic = {}
for k, v in zip(names, num):
dic[k] = v
print(dic)
# dic comprehension (zip)
names = ['Merry', 'John', 'Chris']
num = [1, 2, 3]
dic = {k:v for k, v in zip(names, num)}
print(dic)
# Output
{'Merry': 1, 'John': 2, 'Chris': 3}
- 표현식과 조건문을 추가하여 사용 가능
>>>
names = ['Merry', 'John', 'Chris']
num = [1, 2, 3]
dic = {k:v*5 for k, v in zip(names, num) if v % 2 == 1}
print(dic)
# Output
{'Merry': 5, 'Chris': 15}
[4] 연습문제
문제 1)
1부터 1000까지 5의 배수의 합을 list comprehension을 통해 구해보시오.
>>>
# 기존
sum_list = []
for i in range(1, 1001):
if i % 5 == 0:
sum_list.append(i)
print(sum(sum_list))
# list comprehension
sum_list_sum = sum([i for i in range(1, 1001) if i % 5 == 0])
print(sum_list_sum)
# Output
100500
문제 2)
다음 딕셔너리의 키와 값을 바꾸어 출력해보세요. (값을 키로, 키를 값으로)
id_name = {1: 'Merry', 2: 'John', 3: 'Chris'}
>>>
# 기존
reverse_dic = {}
for k, v in id_name.items():
reverse_dic[v] = k
print(reverse_dic)
# dict comprehension
reverse_dic = {v:k for k, v in id_name.items()}
print(reverse_dic)
# Output
{'Merry': 1, 'John': 2, 'Chris': 3}
문제 3)
- 다음 리스트는 리스트 안에 리스트가 들어있습니다. 리스트 안의 리스트를 하나의 리스트로 만들어보시오.
ohlc = [[100, 110, 70, 100],
[200, 210, 180, 190],
[300, 310, 300, 310]]
>>>
# 기존
ls = []
for i in ohlc:
for j in i:
ls.append(j)
print(ls)
# list comprehension
ls = [j for i in ohlc for j in i]
print(ls)
# Output
[100, 110, 70, 100, 200, 210, 180, 190, 300, 310, 300, 310]
문제 4.
다음 리스트의 요소의 빈도값을 dict comprehension을 사용하여 딕셔너리로 출력해보세요.
x = ['a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'c']
>>>
# 기존
dic = {}
for i in set(x): # 중복 제거
dic[i] = x.count(i)
print(dic)
# dict comprehension
dic = {i:x.count(i) for i in set(x)}
print(dic)
# Output
{'a': 2, 'b': 3, 'c': 4}
'Python > Basic' 카테고리의 다른 글
[Python] 제어문 (if, while, for 문) (0) | 2024.08.21 |
---|---|
[Python] 자료형 (리스트, 튜플, 딕셔너리, 집합) (0) | 2024.08.18 |