본문 바로가기
코딩코딩/파이썬

리스트 컴프리헨션/List comprehensions(리스트 축약)

by g0n1 2020. 3. 30.
728x90

1~20사이의 짝수만 들어있는 evens 리스트를 만드시오.

 

방법 1

먼저 evens라는 리스트를 정의하고 for 문에 %2를 한 값이 0이라면 2의 배수이므로 evens에 append를 하면 됩니다.

evens = []
for n in range(1,21):
    if n%2 == 0:
        evens.append(n)

방법 2

하지만 이런 방법도 있습니다.

evens = [n for n in range(1,21) if n%2 == 0]

4줄 --> 1줄로 바뀌었네요.

리스트를 이렇게 간단히 표현해줄 수 있는 걸 리스트 컴프리헨션이라고 합니다.

comprehension의 뜻은 이해(력)이라는 뜻인데 리스트의 이해라기 보다는, 축약이라는 표현이 더 자연스러워 보입니다.

 

알기 쉽게 표현해보자면

[ <<expression>>  for  <<element>>  in  <<iterable>>  if  <<condition>> ]

 

iterable 내의 element에 대해 condition을 만족하는 값만 expression대로 넣는다.

(제 멋대로 해석한 거라 이렇게 표현해도 될지 모르겠네요 ㅎㅎ)

 

 

 

 

if만 쓸 수 있냐구요? 아닙니다!

else도 쓸 수 있습니다 ㅎㅎ

 

짝수면 제곱을 하고, 그게 아니라면 세제곱을 해서 만든 리스트를 살펴봅시다.

square_cubes = []
for n in range(1,21):
    if n%2 == 0:
        square_cubes.append(n**2)
    else:
        square_cubes.append(n**3)

이번엔 else가 붙어서 총 6줄이 되었습니다.

하지만 컴프리헨션이라면?

square_cubes = [n**2 if n%2 == 0 else n**3 for n in range(1,21)]

이렇게 한줄로 쓰니 정말 고수가 된 것 같습니다. ㅠㅠ

 

다음 글에선 중첩하여 쓰는 법에 대해 알아봅시다.

 

728x90

댓글