라떼는말이야

[Python] 리스트의 특정 원소 모두 제거하기 본문

알고리즘

[Python] 리스트의 특정 원소 모두 제거하기

MangBaam 2021. 8. 22. 01:24
반응형

Python에서 리스트는 굉장히 중요하고 상징적인 자료형이다.

코딩테스트를 할 때 리스트에서 특정 값들을 모두 제거하고 싶을 때가 있다.

리스트에는 remove라는 메서드가 있어 특정 값을 제거할 수 있는데 최초로 발견되는 하나만 제거한다.

예를 들어 li = [1, 3, 5, 5, 7, 7, 8] 인 리스트가 존재할 때 li.remove(5) 를 하면 [1, 3, 5, 7, 7, 8]이 된다.

즉, 5가 여러 번 등장하면 모두 지우지 못하고 최초로 발견된 5만 제거가 된 것이다.

5를 모두 제거하고 싶다면 위와 같은 코드를 작성해 제거 할 수도 있다.

하지만 remove() 메서드는 시간 복잡도가 O(N)이고, 중복된 데이터가 많을 때 여러 번 반복하게 되면 굉장히 시간 소모가 많아진다.

그래서 다음과 같은 방법을 사용하면 리스트를 한 번만 순회하여 제거할 수 있다.

 

모든 특정한 요소 제거하는 방법

li = [1, 3, 5, 5, 7, 7, 8]
remove_set = {3, 5}

li = [i for i in li if i not in remove_set]
print(li)

위 코드는 리스트 컴프리헨션을 아는 사람이라면 어렵지 않게 해석할 수 있다.

제거하고자 하는 데이터들을 remove_set에 저장하고, remove_set에 없는 데이터만 새로운 리스트에 저장하여 특정 값을 제거하는 효과를 낼 수 있는 것이다.

훨씬 시간적으로 효율적인 방법이 되기 때문에 코딩테스트에서 특정 요소를 모두 제거해야 할 때 사용하면 유용할 스킬이다.

반응형
Comments