반응형
[주절주절]
-
[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. 요정님🧚🏻♂️
[질문 노트]
-
반응형
'컴린이 일기장 > Today I Learned' 카테고리의 다른 글
[TIL] 0819 BAGAN 논문 정리 (0) | 2020.08.19 |
---|---|
[TIL] Python isinstance / Json.dumps ; default (0) | 2020.06.28 |
[TIL] Python 내장 함수 (0) | 2020.06.15 |
[TIL] CycleGAN 이용해 사진 ↔ 고흐의 그림 변환하기 (0) | 2020.04.07 |
[TIL] DCGAN 이용해 Fashion MNIST 이미지 생성하기 (0) | 2020.04.02 |