List에서 일부 요소를 삭제하거나 추출하는 4가지 방법(del, remove, pop, slice)의 성능 비교

1. del

  • del a[x]: a 리스트에서 x번째 요소값 삭제

    (example)

      a = [1,2,3]
      del a[1]
      print(a)
    
      --------------------------------------------------
      [1, 3]
    


2. remove(x)

  • remove(x): 리스트에서 첫번째로 나오는 x 삭제

    (example)

      a = [1,2,3,1,2,3]
      a.remove(3)
      print(a)
    
      --------------------------------------------------
      [1, 2, 1, 2, 3]
    


3. pop(), pop(x)

  • pop(): 리스트의 맨 마지막 요소 리턴 및 그 요소 삭제

    (example)

      a = [1,2,3]
      popped_item = a.pop()
    
      print(a)
      print(popped_item)
    
      --------------------------------------------------
      [1, 2]
      3
    
  • pop(x): 리스트의 x번째 요소 리턴 및 그 요소 삭제

    (example)

      a = [1,2,3]
      popped_item = a.pop(1)
    
      print(a)
      print(popped_item)
    
      --------------------------------------------------
      [1, 3]
      2
    


4. slice

  • slicing은 위와 같이 리스트의 값을 삭제하는 것이 아닌 원하는 범위를 출력하는 것. 즉, 원본 리스트는 그대로 보존하고 원하는 범위만큼 새로운 리스트를 생성하기 위해 사용.

    (example)

      a = [1,2,3,4,5]
      b = a[:2]
      c = a[2:]
    
      print(b)
      print(c)
        
      --------------------------------------------------
      [1, 2]
      [3, 4, 5]
    


4. del, remove, pop, slice 성능비교

import time

# del
start1 = time.time()
del a[9]
end1 = time.time()

# remove
start2 = time.time()
b.remove(10)
end2 = time.time()

# pop
start3 = time.time()
a.pop(10)
end3 = time.time()

# slice
start4 = time.time()
a[10:]
end4 = time.time()

print(f'del time: {end1 - start1:.10f} sec')
print(f'rem time: {end2 - start2:.10f} sec')
print(f'pop time: {end3 - start3:.10f} sec')
print(f'sli time: {end4 - start4:.10f} sec')

--------------------------------------------------
del time: 0.0008070469 sec
rem time: 0.0002350807 sec
pop time: 0.0002071857 sec
sli time: 0.0022301674 sec
  • 결론
    • 가장 오래 걸리는 시간 순으로 slice > del > remove > pop
    • 원본 리스트를 보존하지 않아도 된다면 pop을 쓰는 것이 속도 측면에서 가장 유리할 것으로 보인다.
    • 물론 원본 리스트를 보존해야한다면 속도 측면에서 느리더라도 slice를 써야한다.

Tags:

Categories:

Updated:

Leave a comment