반응형
1.성능 비교를 위한 예제코드
import time
import dis
SIZE=10000000
def func_forloop():
start_time = time.time()
factor = 1
bucket = []
for i in range(SIZE):
bucket.append(i * factor)
print(len(bucket))
end_time = time.time()
print(f"bucket size = {len(bucket)} \nfunc_forloop execution time : {(end_time - start_time)* 1000}ms")
def func_list_comprehension():
start_time = time.time()
factor = 1
bucket =[i * factor for i in range(SIZE)]
end_time = time.time()
print(len(bucket))
print(f"bucket size = {len(bucket)} \nfunc_list_comprehension execution time : {(end_time - start_time)* 1000}ms")
func_forloop()
func_list_comprehension()
dis.dis(func_forloop)
print('--------------------------')
dis.dis(func_list_comprehension)
2.요약
- dis 를 통해 변환된 바이트 코드를 볼 수 있다.
- for loop 는 리스트에 요소를 추가하는 작업을 append method 를 쓰고, list comprehension 은 LIST_APPEND 라는 바이트 코드를 쓴다.
- 인터프리터 모드에서 동작하는 프로그램에서 ListComprehension 에서 바이트를 특별 처리하므로 성능이 빠르다. 구글링해보면 타 블로그에서 컴파일 할 경우 for loop와 성능이 비슷해진다는 실험을 봤다. 따라서 list comprehension 만을 고집할 필요도 없다.
반응형
'Algorithm' 카테고리의 다른 글
Baekjoon 백준 알고리즘 - 풍선 터뜨리기 ( 2346 ) (0) | 2024.06.23 |
---|---|
Baekjoon 백준 알고리즘 - DNA ( 1969 ) (1) | 2024.04.14 |
Baekjoon 백준 알고리즘 - 벌집( 2292 ) (0) | 2024.03.11 |
Baekjoon 백준 알고리즘 - 색종이( 2563 ) (0) | 2024.02.18 |
Baekjoon 백준 알고리즘 - 회전하는 큐( 1021 ) (1) | 2023.11.27 |