[TIL]list.append(x), list[i]=x 속도비교

차보경·2023년 1월 3일
0

TIL

목록 보기
21/37
post-thumbnail

Hmmm.....

지난 해커톤을 진행하면서 list.append()의 속도가 굉장히 느리다는 것을 알고 최대한 지양하려고 노력중이다(백준 풀 때도 여기서 속도가 느려지는 것을 경험함).

근데 모야!!!!
이번에 다른 프로젝트를 하면서 pd data를 읽어오면서 list에 넣는 작업을 하는데 오히려 append의 속도가 더 빠른 것을 확인했다.... 모지...!??

TEST CODE

# 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

갯수가 적어서 그런가?


1. for 문과 enumerate 의 속도비교

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의 속도가 근소하게 빠른 것이 보인다.


2. TEST CODE 평균 속도 체크

아무래도 코랩을 쓰다보니 속도가 일정치 않은 것 같아 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문으로 작성!

더 많은 데이터를 다룰때 다시 속도 체크를 하면서 데이터 갯수별로 비교해봐야겠다.

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

0개의 댓글