- 여러개 값을 동시에 만드는 기법
- 반복문에 비해서 간결함
1. iterable container 객체 생성
(1) List Comprehension(LC)
- 0~9 에서 각 값의 제곱인 LC
- 0~9에서의 값을 str인 LC
- for 문(statement)이 아니라 식
- functional programming에서는 for문을 지양함
[str(x) for x in range (10)]
==> ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
[x*x for x in range (10)]
==> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# filtering
[ x for x in range(10) if x%2==0] # 짝수
==> [0, 2, 4, 6, 8]
# list 값이 5보다 작으면 2, 크면 그 값 그대로 출력
[ 2 if i < 5 else i for i in range(10)] #삼항 연산자
==> [2, 2, 2, 2, 2, 5, 6, 7, 8, 9]
#for 문에 비해서 실행 속도가 빠르고 코드가 간결
%%timeit
temp=[]
for i in range(1000):
temp.append(i)
==> 70.7 µs ± 4.93 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%%timeit
[x for x in range(1000)]
==> 39.4 µs ± 5.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
(2) Set Comprehension (SC)
{x for x in range(5)} #set
==> {0, 1, 2, 3, 4}
(3) Dict Comprehension (DC)
{str(x):x for x in range(10)} #dict
==> {'0': 0,
'1': 1,
'2': 2,
'3': 3,
'4': 4,
'5': 5,
'6': 6,
'7': 7,
'8': 8,
'9': 9}
(4) Generator Comprehension (GE)
- expression 이라 불림
- tuple comp
- generator function:함수에 def yield or yield from