Hmmm.....
지난 해커톤을 진행하면서 list.append()의 속도가 굉장히 느리다는 것을 알고 최대한 지양하려고 노력중이다(백준 풀 때도 여기서 속도가 느려지는 것을 경험함).
근데 모야!!!!
이번에 다른 프로젝트를 하면서 pd data를 읽어오면서 list에 넣는 작업을 하는데 오히려 append의 속도가 더 빠른 것을 확인했다.... 모지...!??
# pandas data 만들기
data = pd.read_csv('/content/drive/MyDrive/221219_extract_file.csv')
data
###### 1) list 갯수대로 생성 후 바꾸기
start_time = time.time()
# colunm추출
colunms = ['0'] * len(data.columns)
for idx, cols in enumerate(data):
colunms[idx] = cols
end_time = time.time()
print(f'{len(data.columns)}데이터 소요시간 {end_time - start_time}')
###### 2) append로 신규값 넣어주기
start_time = time.time()
# colunm추출
colunm = []
for i in data:
colunm.append(i)
end_time = time.time()
print(f'{len(data.columns)}데이터 소요시간 {end_time - start_time}')
그 결과는 이렇게 나왔다.
16데이터 소요시간 0.000163
16데이터 소요시간 0.000113
갯수가 적어서 그런가?
for문과 enumerate의 속도 차이일수도 있겠다 싶어서 500회 반복한 것의 속도를 비교했다.
times = 0
for i in range(500):
start_time = time.time()
for idx, cols in enumerate(data):
print('', end = '')
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
times = 0
for i in range(500):
start_time = time.time()
for i in data:
print('', end = '')
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
16데이터 평균 소요시간 0.005726
16데이터 평균 소요시간 0.006238
enumerate의 속도가 근소하게 빠른 것이 보인다.
아무래도 코랩을 쓰다보니 속도가 일정치 않은 것 같아 test코드를 500회 반복해보기로했다.
times = 0
for i in range(500):
start_time = time.time()
# colunm추출
colunms = ['0'] * len(data.columns)
for idx, cols in enumerate(data):
colunms[idx] = cols
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
times = 0
for i in range(500):
start_time = time.time()
# colunm추출
colunm = []
for i in data:
colunm.append(i)
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
16데이터 평균 소요시간 5.410194396972656e-06
16데이터 평균 소요시간 4.1985511779785155e-06
이것 역시 근소하지만 append()가 더 빠른 것이 보인다.
찾아보니 갯수에 따라 차이가 있다고 한다.
이렇게 작은 갯수라면 append가 나은데, 이보다 더 빠른것잌ㅋㅋㅋㅋㅋ
list comprehension문이다...ㅎ...
times = 0
for i in range(500):
start_time = time.time()
# colunm추출
colunms = ['0'] * len(data.columns)
for idx, cols in enumerate(data):
colunms[idx] = cols
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
times = 0
for i in range(500):
start_time = time.time()
# colunm추출
colunm = []
for i in data:
colunm.append(i)
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
times = 0
for i in range(500):
start_time = time.time()
# colunm추출
colunmss = [col for col in data]
end_time = time.time()
times += end_time - start_time
print(f'{len(data.columns)}데이터 평균 소요시간 {times/500}')
16데이터 평균 소요시간 5.410194396972656e-06
16데이터 평균 소요시간 4.1985511779785155e-06
16데이터 평균 소요시간 3.208637237548828e-06
확연한 속도차이가 보인다ㅎㅎ..꼭 쓸려고하면 생각이안나요..ㅎ.ㅎㅎ.
이제 list 반복은 되도록이면 comprehension문으로 작성!
더 많은 데이터를 다룰때 다시 속도 체크를 하면서 데이터 갯수별로 비교해봐야겠다.