본문 바로가기

컴린이 일기장/Today I Learned

[TIL] Python List Comprehension

반응형

[주절주절]

-

 

[Today I Learned]

# Python comprehension 

Python comprehension이란 iterable한 객체를 생성하기 위한 방법 중 하나로 크게 List, Set, Dictionary, Generator, 총 4가지 종류의 comprehension이 있다. 

# List Comprehension(LC)

List comprehension은 리스트를 쉽게 생성할 수 있는 방법이다. 단순 반복 조건은 물론, 함수까지 함께 이용하면 다양한 조건의 리스트도 생성할 수 있다. 다음은 내가 가장 처음 작성했던 코드와, 그를 List comprehension을 통해 개선한 결과이다.

1) 1~n까지의 숫자를 특정 함수에 적용한 리스트 반복 생성

#개선 전
def rating(number):
	rates =[]
	for x in range(number):
    	rate = -math(logx+1,2)+7.66
        rates.append(rate)
        
    return rates
#개선 후
def rating(number):
	return [-math(logx+1,2) + 7.66 for x in range(number)]

number 역시 Dataframe에서 map으로 받아오는 값으로 몇만행을 처리했어야했다. 거기에 반복문과 append까지 더해져 시간이 아주 오래걸렸었는데 comprehension을 통해 짧은 시간에 처리할 수 있게 되었다. (tqdm을 걸었을 때가 더 느려졌을 정도로...!)

+ map의 경우도

#개선 전
dat_series = plylst_train['num_songs'].map(lambda x : rating(x))

#개선 후 
dat_series = plylst_train['num_songs'].map(rating)

위와 같이 코드를 짧게 줄여 쓸 수 있다. (이건 속도면에서도 차이가 있는지 모르겠다.)

 

2) 시리즈 컬럼 내용을 하나의 리스트로 합치기

#개선 전
def row_sum(series):
	dat =[]
	for row in series:
    	dat.append(row)
    
    return sum(dat,[])
    
dat = row_sum(series)
    	

#개선 후
dat = [y for x in dat_series for y in x]	

append 성애자... 역시나 반복문과 append, 이중 리스트를 풀어주는 과정이 함께 쓰여서 시간이 아주 오래걸렸다. 이 역시 Comprehension에 두 번의 반복문을 사용해서 빠르게 처리할 수 있었다. 

Thanks to. 요정님🧚🏻‍♂️

 

[질문 노트]

반응형