iterable한 객체를 생성하기 위한 방법 중 하나로 파이썬에서 사용할 수 있는 기능
iterable이란?
iterator란?
iterable한 객체는 iterator인가? => X
[출력표현식 for 요소 in 입력Sequnce [if 조건식]]
ol = [1, 2, 'A', 3, True]
nl = [i*i for i in ol if type(i) == int]
print(nl)
#출력 결과
#[1, 4, 9]
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')]
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]
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은 중복을 허용하지 않기 때문에 하나 제외하고 중복 데이터는 제거, 순서 보장 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}
{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}
Comprehension 구문을 사용해 소괄호로 묶어주면 자동적으로 파이썬에서 generator expression으로 인식해서 generator 객체 생성함
(출력표현식 for 요소 in 입력Sequnce [if 조건식])
❗ generator란? [Python] 제네레이터 (generator)
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