데이터 분석을 하다 보면 리스트에 None 값이 포함되어 있는 경우를 자주 마주하게 됩니다. None 값은 수학 연산이나 문자열 연산 등에 직접 사용할 수 없기 때문에, 해당 값의 위치를 먼저 파악한 뒤 변환하거나 적절하게 처리해야 합니다. 이 글에서는 리스트 내 None 값의 인덱스를 찾는 두 가지 대표적인 방법을 소개합니다.
1. range() 함수 활용하기
range() 함수와 len() 함수를 조합하면 리스트의 각 요소를 순회하면서 None과 비교하고, 해당 인덱스 위치를 추출할 수 있습니다. 일반적으로 for 루프 또는 리스트 컴프리헨션(list comprehension)을 사용해 구현합니다.
예제
listA = ['Sun', 'Mon', None, 'Wed', None, None]
# 주어진 리스트
print("Given list : ", listA)
# range() 사용
positions = [i for i in range(len(listA)) if listA[i] == None]
# 결과 출력
print("None value positions : ", positions)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list : ['Sun', 'Mon', None, 'Wed', None, None] None value positions : [2, 4, 5]
2. enumerate() 함수 활용하기
enumerate() 함수를 사용하는 방법도 있습니다. enumerate()는 리스트를 순회하면서 각 요소와 그 인덱스를 함께 반환하므로, 요소 값을 None과 비교한 후 해당 위치를 손쉽게 선택할 수 있습니다. 인덱스 계산을 직접 하지 않아도 되므로 코드가 더 간결하고 가독성이 좋습니다.
예제
listA = ['Sun', 'Mon', None, 'Wed', None, None]
# 주어진 리스트
print("Given list : ", listA)
# enumerate() 사용
positions = [i for i, val in enumerate(listA) if val == None]
# 결과 출력
print("None value positions : ", positions)실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list : ['Sun', 'Mon', None, 'Wed', None, None] None value positions : [2, 4, 5]
마무리 및 팁
두 방법 모두 동일한 결과를 반환하지만, enumerate()를 사용하는 방식이 인덱스와 값을 동시에 다룰 수 있어 더 파이썬다운(Pythonic) 코드로 평가받습니다. 또한 실무에서는 val == None 대신 val is None을 사용하는 것이 권장됩니다. is 연산자는 객체의 정체성(identity)을 비교하기 때문에 None 검사 시 더 명확하고 안전하며, PEP 8 스타일 가이드에서도 이를 표준으로 제안하고 있습니다.