Programming

tqdm(zip(

minigb 2024. 1. 12. 00:36
for id, audio_path in tqdm(zip(id_list, audio_path_list)):
  ...

 

1.

zip generator는 list가 하나라도 끝나면 그대로 종료한다.

만약 list의 길이가 다르면 그중에서 가장 짧은 길이만큼 iterate 하기 때문에 그 전에 두 list의 길이가 같은지 확인해보는 게 좋다.

assert len(id_list) == len(audio_path_list), f'{len(id_list)} != {len(audio_path_list)}'

사소한 습관은 중요하다.

 

2.

zip은 generator이기 때문에 그때그때 lazy 하게 item을 생성한다. 그러므로 zip이 생성하는 것의 총 element 개수를 미리 알 수 없기 때문에 tqdm이 예상되는 전체 소요시간을 알려주지 못한다.

대신 it/s 값을 이용해서 직접 계산하면 되긴 하지만 귀찮다.

for id, audio_path in tqdm(list(zip(id_list, audio_path_list))):
  ...

 

총 길이를 알 수 있도록 이렇게 list of tuples를 만들면 해결된다.

 

그런데 이렇게 하면 전체 list가 모두 메모리에 올라가고, zip이 lazy하게 작동하므로 처음부터 모든 걸 메모리에 저장해둘 필요가 없다는 장점을 잃는다.

 

근데 또 생각해보면 이 laziness가 zip 사용에 엄청 중요한 장점인 것도 아니고 이렇게 list 생성해두는 게 메모리 관리에 엄청나게 큰 영향을 미치진 않을 거 같다.

이게 중요할 만큼 큰 데이터로 작업하는 일이 있으려나?

나중에 이유 없이 메모리가 터지는 일이 생기면 이걸 먼저 확인해봐야겠다.

 

3.

처음 tqdm을 접했을 때가 생각난다. 그때 엄청 감탄했는데. 이런 툴이 있다니!

이름도 뭔가 귀엽다. 티큐디엠

from tqdm import tqdm인 것도 귀엽다.

 

처음 zip을 접했을 때도 생각난다.

이걸 몰랐을 때는

for i, id in enumerate(id_list):
  audio_path = audio_path_list[i]
  ...

이런 식으로 짰다.

 

그러고 보니 enumerate도 알기 전에는

for i in range(len(id_list)):
  id = id_list[i]
  audio_path = audio_path_list[i]
  ...

이렇게 짰겠구나.

파이팅이다.

 

혹시 다른 팁이나 제가 잘못 이해한 부분 있으면 알려주세용

 

 

 

 

 

https://blog.naver.com/mini_gb/223319837165

 

tqdm(zip(

1. zip generator는 list가 하나라도 끝나면 그대로 종료한다. 만약 list의 길이가 다르면 그중에서 가장 ...

blog.naver.com