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

Python – 모든 요소가 동일한 튜플만 필터링하는 방법

튜플의 모든 요소가 서로 같은 경우만 골라내야 할 때는 리스트 컴프리헨션(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을 활용하는 방법이 더 간결하고 직관적입니다.