본문 바로가기
Programming Language/Python

[Python] List : Pop, Del, Remove, Slicing 속도 비교

by 홍월이_ 2023. 1. 19.

아래 내용들은 제가 혼자 학습하면서 정리한 내용들입니다.

'부족한 내용' 혹은 '잘못된 내용'이 있을 수 있습니다.

댓글 남겨주시면 더욱 공부하고 수정하도록 하겠습니다.

감사합니다.


Python 리스트 요소 삭제 속도 비교

리스트에서 특정 위치의 요소를 삭제할때 사용하는 대표적인 네가지 기능인 slicing, pop, del, remove의 처리 속도를 비교해보았다.

속도를 비교하게 된 계기는 프로그래머스에서 문제를 풀다가 효율성 테스트에서 계속 막혀서 성능 개선을 위해서였다.

결론부터 말하자면 이런 내용을 몰랐을때 나는 Slicing 방법으로 리스트를 처리했었는데, del을 사용하니 속도가 많이 개선되었고 효율성 테스트를 통과할 수 있었다!!

성능을 비교하는 것이 주 목적이기에 각각의 사용법에 대한 것들은 생략하도록 하겠다.

  • 아래는 해당 문제의 링크와 내 풀이를 포스팅한 내용이다. 어떤 문제인지와 풀이법이 궁금하다면 참고!

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

[Algorithm] 프로그래머스 - 햄버거 만들기

시작하며... 모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다. 마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를

redmooncode.tistory.com

 

1. pop

길이가 500만인 리스트를 사용하였고, 시간 측정을 위해 time 모듈을 이용하였다.

아래 코드는 네가지 기능들 모두에 공통적으로 사용할 것이다.

import time

str_list = [i for i in range(5000000)]

 

먼저 pop의 성능을 알아보자. pop은 리스트에서 인덱스를 이용하여 값을 지운다. 그리고 지워진 인덱스의 값을 반환한다. del과는 다르게 지워진 값을 반환하기때문에 미세한 속도 차이가 생긴다고 한다.

리스트에서 값을 삭제한 후 리스트를 재조정한다.

# pop
start_time = time.time()
list_pop = str_list.copy()
list_pop.pop(0)
end_time = time.time()
print(f'pop : {end_time - start_time:.4f}초')

>>> pop : 0.0450초

 

2. del

del은 pop과 마찬가지로 인덱스를 이용하여 리스트의 값을 삭제한다.

리스트의 슬라이싱을 활용하여 삭제도 가능하며, pop과 다르가 리턴값이 없어서 미세하게 더 빠르다. 마찬가지로, 삭제한 후 리스트를 재조정한다.

# del
start_time = time.time()
list_del = str_list.copy()
del list_del[0]
end_time = time.time()
print(f'del : {end_time - start_time:.4f}초')

>>> del : 0.0319초

 

3. remove

remove는 위의 두개와는 달리 인덱스 입력으로 삭제하는 방식이 아니라 지우고자 하는 값을 입력하는 방법이다. 해당하는 값이 복수로 존재한다면 앞서 존재하는 것을 지운다.

# remove
start_time = time.time()
list_remove = str_list.copy()
list_remove.remove(0)
end_time = time.time()
print(f'remove : {end_time - start_time:.4f}초')

>>> remove : 0.0335초

 

4. slicing

slicing은 엄밀히 말하면 리스트의 요소 삭제라기 보다는 입력한 범위로 다시 출력하는 방법이다.

속도상 가장 느리다.

# slice
start_time = time.time()
list_slice = str_list.copy()
list_slice = list_slice[1:]
end_time = time.time()
print(f'slicing : {end_time - start_time:.4f}초')

>>> slicing : 0.0909초

 

요약

  • pop : 0.0450초
  • del : 0.0319초
  • remove : 0.0335초
  • slicing : 0.0909초

'삭제' 를 기준으로는 del이 가장 빠르고 slicing이 가장 느리다

리스트 원본을 보존해야한다면 slicing 사용을 고려해도 괜찮다.

 

 

REFERENCE

 

[Python] 리스트 slice, pop, del 성능 비교 및 사용방법

slice, pop, del 사용방법remove()remove()는 지우고자 하는 인덱스가 아닌, 값을 입력하는 방식입니다. 만약 지우고자 하는 값이 리스트 내에 2개 이상이 있다면 순서상 가장 앞에 있는 값을 지우게 됩니

brownbears.tistory.com

 

 

 

... 끝!

댓글