List & Array 반복 비교

이 글은 기술적으로 어떤 방식이 더 빠른가를 테스트하기보다 실제 많이 사용하는 패턴을 중심으로 어떤 패턴이 속도가 빠른지를 측정해 보았다.


실험 내용

목적: Python_list 또는 Numpy_array의 각 요소에 1을 더한 후 결과를 반환한다. (: [0, 1, 2, 3] → [1, 2, 3, 4])

방법: 한 패턴 당 총 3번의 실행 시간을 측정하고 평균값을 구한다. 

comp_Py_list: 1.042  # list comprehension
map_Py_list: 1.432  # list(map(...))
for_Py_list: 1.589  # for i in Py_list
add_Np_array: 0.016  # + (operator)
def_Np_array: 0.026  # pre-defined 'add' function

array가 압도적으로 빠른 것을 확인할 수 있다. Python list의 경우, 리스트 컴프리헨션을 사용했을 때 비교적 빠른 것을 확인할 수 있다.

자세한 코드는 아래에서 확인할 수 있다.

import time
import numpy as np

def timer(function):
    # 시간 측정을 위한 함수
    ...

def add(i):
    return i + 1


py_list = list(range(10**7))
np_array = np.array(py_list)

### 실행 패턴 ###

@timer
def for_Py_list():
    _ = list()
    for i in py_list:
        _.append(i + 1)

@timer
def comp_Py_list():
    _ = [i + 1 for i in py_list]

@timer
def map_Py_list():
    _ = list(map(add, py_list))

@timer
def add_Np_array():
    _ = np_array + 1

@timer
def def_Np_array():
    _ = add(np_array)

단순 반복

만약 시퀀스의 요소를 변환하는 작업이 아니라 단순 반복이라면 이야기가 달라진다. 

@timer
def for_py_list():
    for i in py_list:
        i + 1

@timer
def for_np_array():
    for i in np_array:
        i + 1
for_py_list: 0.531
for_np_array: 2.750

이렇게 단순 반복하는 작업에서는 Python list가 확실히 더 빠른 속도를 보여준다.