python/기초

[파이썬 기초] 리스트 컴프리헨션

끼발자 2021. 8. 17. 11:20
반응형

 

파이썬을 사용하는 사용자라면,

알고있으면 너무너무 유용한 기능이 있다.

 

>> 리스트 컴프리헨션 << 

 

1~10까지 배열을 담은 리스트를 만들기 위해서 가장 먼저 드는 생각은

list = []
for i in range(1,11):
	list.append(i)

 

일 것이다. 

직관적이고, 코드도 길지 않다.

 

이 코드는 앞에서 말한 리스트 컴프리헨션으로 한줄 코딩이 가능하다.

list = [i for i in range(1,11)]

 

모두 동일한 결과를 볼 수 있다.

반복문이 리스트 안에 들어간 형태이다.

 

복잡하게 구성도 가능하다.

list_ = [ i*2 for i in range(50) ] # 0~49까지 2를 곱한 값이 저장
list_2 = [ i for i in range(50) if i%2 ==0] # 0~49까지 2로 나눈 나머지가 0인 값 저장
list_3 = [ i if i%2==0 else 0 for i in range(50)] #0~49까지 2로나눈 나머지가 0인값 저장, 아닌경우 0

 

조금 이상한게, 리스트 컴프리헨션 안에 if문만 있는 경우에는 for문 뒤에 적어주지만,

if~else문이 있는 경우 for문 앞에 적어준다. 

 

또한, 여러번 사용도 가능하다.

list_4 = [(x,'공부는',y) for x in ['파이썬','R'] for y in ['독학','블로그']]
#[('파이썬', '공부는', '독학'),
 #('파이썬', '공부는', '블로그'),
 #('R', '공부는', '독학'),
 #('R', '공부는', '블로그')]

단순한 경우에는 유용하게 사용할 수 있지만,

for문으로 작성하는것 보다 가독성이 떨어지므로 과도하게 길어진다면 지양하는게 좋다.

 

조건문도 여러번 사용이 가능하다.

 

list_5 = [i for i in range(50) if i%2==0 if i%3==0] # 0~49까지 2와 3으로 나누어 떨어지는 수.
list_6 = [i for i in range(50) if i%2==0 and i%3==0]# 위와 같은 결과

 

if를 여러번 쓸 수도 있지만, if 조건 안에 다른 연산자를 활용할 수도 있다.

 

반응형