[Python] 파이썬 Comprehension
🎈 Comprehension이란?
iterable한 객체를 생성하기 위한 방법 중 하나로 파이썬에서 사용할 수 있는 기능
❗ iterable, iterator
iterable이란?
- member를 하나씩 차례로 반환 가능한 객체
- list, str, tuple ...
iterator란?
- next() 메소드로 데이터를 순차적으로 호출 가능한 객체
- next()로 다음 데이터를 불러 올 수 없는 경우 (가장 마지막 데이터) StopIteration exception 발생
iterable한 객체는 iterator인가? => X
- list는 iterable이지만 next() 메소드로 호출해도 동작하지 않음
- iterable을 iterator로 변환하고 싶으면 iter() 사용하기
- for문으로 list를 돌릴 때 순차적 접근이 가능한데 이는 for문으로 looping 하는 동안 파이썬 내부에서 임시로 list를 iterator로 자동 변환 해줬기 때문
🎈 List Comprehension
[출력표현식 for 요소 in 입력Sequnce [if 조건식]]
- 예제 1 (조건문 사용)
반복문의 인자가 조건문에 해당하는지 확인 후 인자를 리스트의 요소로 가짐
ol = [1, 2, 'A', 3, True]
nl = [i*i for i in ol if type(i) == int]
print(nl)
#출력 결과
#[1, 4, 9]
- 예제 2 (두 개의 for문)
앞의 for문에서 하나의 요소에 대해 뒤의 for문 적용
nums = [1, 2, 3]
alp = ['A', 'B']
l = [(n, a) for n in nums for a in alp]
print(l)
#위와 결과 동일
ll = []
for n in nums:
for a in alp:
ll.append((n, a))
print(ll)
#출력 결과
#[(1, 'A'), (1, 'B'), (2, 'A'), (2, 'B'), (3, 'A'), (3, 'B')]
#[(1, 'A'), (1, 'B'), (2, 'A'), (2, 'B'), (3, 'A'), (3, 'B')]
- 예제 3 (두 개의 for문)
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
f = [e for r in matrix for e in r]
print(f)
#위와 결과 동일
ff = []
for r in matrix:
for e in r:
ff.append(e)
print(ff)
#출력 결과
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
- 예제 4(조건문에서 else 사용)
l = ['even' if i%2 ==0 else 'odd' for i in range(1, 11)]
print(l)
#출력 결과
#['odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even']
🎈 Set Comprehension
set은 중복을 허용하지 않기 때문에 하나 제외하고 중복 데이터는 제거, 순서 보장 X
{출력표현식 for 요소 in 입력Sequnce [if 조건식]}
- 예제
ol = [1, 1, 2, 2, 3, 4]
nl = {i*i for i in ol}
print(nl)
#출력 결과
#{16, 1, 4, 9}
🎈 Dict Comprehension
{key:value for 요소 in 입력Sequence [if 조건식]}
od = {1: 'one', 2: 'two', 3:'three'}
nd = {value:key for key, value in od.items()}
print(nd)
#출력 결과
#{'one': 1, 'two': 2, 'three': 3}
🎈 Generator Expression
Comprehension 구문을 사용해 소괄호로 묶어주면 자동적으로 파이썬에서 generator expression으로 인식해서 generator 객체 생성함
(출력표현식 for 요소 in 입력Sequnce [if 조건식])
❗ generator란? [Python] 제네레이터 (generator)
- iterator를 생성해주는 함수
- 함수 안에 yield 사용해 생성 -> 생성한 generator는 iterable한 객체
- 모든 generator는 iterator
def test_generator():
yield 1
yield 2
yield 3
gen = test_generator()
print(next(gen))
print(next(gen))
print(next(gen))
#print(next(gen)) #에러
#출력 결과
#1
#2
#3
- 예제
gen = (x**2 for x in range(5))
print(gen)
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
#출력 결과
#<generator object <genexpr> at 0x009A5798>
#0
#1
#4
#9
#16
참고
https://wikidocs.net/16069
http://pythonstudy.xyz/python/article/22-Python-Comprehension
https://bluese05.tistory.com/55
https://mingrammer.com/introduce-comprehension-of-python/
https://doorbw.tistory.com/174
Author And Source
이 문제에 관하여([Python] 파이썬 Comprehension), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chldppwls12/Python-파이썬-Comprehension저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)