숫자로 이루어진 리스트가 있을 때, 해당 숫자들이 연속적인지 확인하고 싶은 경우가 있습니다. 또한 최댓값을 범위의 끝으로 간주했을 때, 그 범위 안에서 어떤 숫자가 빠져 있는지 찾아야 할 수도 있습니다. 이번 글에서는 Python으로 누락된 요소를 찾는 두 가지 방법을 소개합니다.
range와 max 함수 활용하기
첫 번째 방법은 not in 연산자와 함께 for 반복문을 사용하여 특정 범위 내에 존재하지 않는 값을 확인하는 것입니다. 이렇게 찾은 누락 값들을 새로운 리스트에 추가하면, 그 리스트가 곧 결과 집합이 됩니다.
예제 코드
listA = [1,5,6, 7,11,14]
# 원본 리스트 출력
print("Given list : ",listA)
# range와 max 활용
res = [ele for ele in range(max(listA) + 1) if ele not in listA]
# 결과 출력
print("Missing elements from the list : \n" ,res)
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Given list : [1, 5, 6, 7, 11, 14] Missing elements from the list : [0, 2, 3, 4, 8, 9, 10, 12, 13]
set 자료형 활용하기
두 번째 방법은 set 함수를 사용하는 것입니다. 먼저 주어진 범위의 모든 고유한 값을 담은 집합을 만든 뒤, 여기서 원본 리스트의 집합을 빼주면 됩니다. 그러면 연속된 숫자 중 누락된 값들만 포함된 결과 집합을 얻을 수 있습니다.
예제 코드
listA = [1,5,6, 7,11,14]
# 원본 리스트 출력
print("Given list : ",listA)
# set 활용
res = list(set(range(max(listA) + 1)) - set(listA))
# 결과 출력
print("Missing elements from the list : \n" ,res)
실행 결과
위 코드를 실행하면 첫 번째 방법과 동일한 결과를 얻을 수 있습니다.
Given list : [1, 5, 6, 7, 11, 14] Missing elements from the list : [0, 2, 3, 4, 8, 9, 10, 12, 13]
마무리
두 방식 모두 동일한 결과를 반환하지만, set을 활용한 차집합 방식이 코드가 더 간결하고 가독성이 좋습니다. 반면 대량의 데이터를 다룰 때는 집합 연산이 O(1) 조회 속도를 제공하므로 성능 면에서도 유리할 수 있습니다. 상황에 맞게 적절한 방법을 선택해 사용하시기 바랍니다.