본문 바로가기

IT/python

리스트 컴프리헨션(list comprehension)

반응형

요즘 머신러닝 공부하면서 자주보게 되었던, 대괄호 안에 있는 for 문.

 

기술의 용어도 모르다가 "클린 파이썬" 이라는 책에서 알게 되었다.

 

리스트를 다루는 방법으로 map, filter 를 쓰는방법이 있다. ( javascript 를 써본사람은 익숙 할듯 )

 

numbers = [ 10, 45, 34, 89, 34, 23, 6 ]
square_numbers = map(lambda num: num**2, numbers) # 배열내 숫자의 제곱을 리턴

data = [1, "A", 0, False, True]
filtered_data = filter(None, data) # 모든 참값에 필터를 사용

이것들을 리스트 컴프리헨션을 이용한 변경 버전 이다. 

square_numbers = [num**2 for num in numbers]

filtered_data = [item for item in data if item ]

즉, 배열내에 배열을 다루는 산식을 넣어서 배열에 대한 공식을 직접 써넣는 방법이다. 

 

# 사용대상

for 문 1개와 if 문 0,1 개로 조합되는 식에 쓸 수 있음

 

# 장점

리스트에 대한 변환을 직관적으로 알아 볼 수 있다.

 

# 사용식

[ 리턴값 for 아이템 in 범위 {if 제한식} ]

 

조금 복잡한 버전. ( 2차원 배열 변환)

matrix = [[1,2,3],
[4,5,6],
[7,8,9]]

# 행렬회전

matrix_changed = [[ matrix[row][col]
 for row in range(0,height) ]
 for col in range(0,width ]
 
 # 결과
 matrix_changed = [[1,4,7],
 [2,5,8],
 [3,6,9]]

데이터 전처리에서 많이 보이는 스킬이니 눈으로 익혀두자!

반응형