Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 모든 요소가 None인 튜플을 리스트에서 제거하는 방법

리스트에 저장된 여러 튜플 중에서 모든 요소가 None으로만 이루어진 튜플을 제거해야 하는 경우가 있습니다. 이럴 때는 파이썬의 리스트 컴프리헨션(list comprehension)과 내장 함수 all()을 조합하면 아주 간단하게 처리할 수 있습니다.

아래 예제를 통해 자세히 살펴보겠습니다.

예제 코드

my_list = [(2, None, 12), (None, None, None), (23, 64), (121, 13), (None, ), (None, 45, 6)]

print("The list is : ")
print(my_list)

my_result = [sub for sub in my_list if not all(elem == None for elem in sub)]

print("The None tuples have been removed, the result is : " )
print(my_result)

실행 결과

The list is :
[(2, None, 12), (None, None, None), (23, 64), (121, 13), (None,), (None, 45, 6)]
The None tuples have been removed, the result is :
[(2, None, 12), (23, 64), (121, 13), (None, 45, 6)]

코드 설명

  • 여러 개의 튜플을 담고 있는 리스트를 정의한 뒤 콘솔에 출력합니다.

  • 리스트 컴프리헨션을 사용하여 리스트의 각 튜플을 하나씩 순회합니다.

  • all() 함수를 통해 각 튜플의 모든 요소가 None인지 검사합니다. 모든 요소가 None이라면 all()은 True를 반환합니다.

  • not 연산자로 조건을 반전시키기 때문에, 모든 요소가 None인 튜플은 결과 리스트에서 제외됩니다.

  • 필터링을 통과한 나머지 데이터는 새로운 변수에 할당됩니다.

  • 이 변수를 출력하면 None으로만 구성된 튜플이 제거된 최종 결과를 확인할 수 있습니다.

대안: any() 함수 활용하기

all() 대신 any()를 사용하면 조건을 더 직관적으로 표현할 수 있습니다. 즉, 'None이 아닌 요소가 하나라도 존재하면 해당 튜플을 유지'하는 방식입니다.

my_result = [sub for sub in my_list if any(elem is not None for elem in sub)]

또한 elem == None보다는 elem is None 형태로 비교하는 것이 파이썬 공식 스타일 가이드(PEP 8)에서 권장하는 방식이므로, 실무 코드에서는 이를 적용하는 것이 좋습니다.