튜플의 모든 요소가 서로 같은 경우만 골라내야 할 때는 리스트 컴프리헨션(list comprehension)과 set 연산자, 그리고 len 메서드를 함께 사용하면 간단하게 해결할 수 있습니다.
예제
아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.
my_list = [(31, 54, 45, 11, 99), (11, 11), (45, 45, 45), (31, 54, 45, 11, 99), (99, 99), (0, 0)]
print("The list is : ")
print(my_list)
my_result = [sub_list for sub_list in my_list if len(set(sub_list)) == 1]
print("The resultant list is : ")
print(my_result)실행 결과
The list is : [(31, 54, 45, 11, 99), (11, 11), (45, 45, 45), (31, 54, 45, 11, 99), (99, 99), (0, 0)] The resultant list is : [(11, 11), (45, 45, 45), (99, 99), (0, 0)]
코드 설명
튜플로 구성된 리스트를 정의한 뒤 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 리스트 내의 각 튜플을 하나씩 순회합니다.
각 튜플에
set()을 적용한 후 길이가 1인지 확인하는 조건을 추가합니다. set은 중복 요소를 자동으로 제거하므로, 모든 요소가 동일한 튜플은 set으로 변환 시 길이가 반드시 1이 됩니다.조건을 만족하는 튜플만 새로운 리스트에 저장됩니다.
필터링된 결과 리스트는 변수
my_result에 할당됩니다.마지막으로 최종 결과를 콘솔에 출력합니다.
참고: 다른 접근 방식
set 대신 all() 함수를 활용해 첫 번째 요소와 나머지 모든 요소를 비교하는 방법도 가능합니다. 예를 들어 all(x == sub[0] for x in sub) 조건을 사용하면 동일한 결과를 얻을 수 있으며, 요소가 해시 불가능(hashable)하지 않은 특수한 경우에 유용할 수 있습니다. 다만 일반적인 상황에서는 위 예제처럼 set을 활용하는 방법이 더 간결하고 직관적입니다.