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

Python에서 튜플의 중복 요소를 다른 값으로 바꾸는 방법

튜플(tuple) 안에서 중복으로 나타나는 요소를 다른 값으로 교체해야 할 때는 set(집합) 자료형과 리스트 컴프리헨션(list comprehension)을 함께 활용하면 간단하게 해결할 수 있습니다.

리스트 컴프리헨션은 반복 가능한 객체를 순회하면서 각 요소에 연산을 적용할 수 있도록 해주는 파이썬의 간결한 문법입니다.

또한 파이썬에는 'set'이라는 자료형이 기본적으로 내장되어 있습니다. set은 오직 고유한(unique) 요소만 저장하며, 교집합·차집합·합집합·대칭차집합과 같은 집합 연산에 매우 유용하게 사용됩니다.

아래 예제를 통해 실제 동작 방식을 살펴보겠습니다.

예제 코드

my_tuple_1 = (11, 14, 0, 78, 33, 11, 10, 78, 0)

print("The tuple is : ")
print(my_tuple_1)
my_set = set()

my_result = tuple(ele if ele not in my_set and not my_set.add(ele)
    else 'FILL' for ele in my_tuple_1)
print("The tuple after replacing the values is: ")
print(my_result)

실행 결과

The tuple is :
(11, 14, 0, 78, 33, 11, 10, 78, 0)
The tuple after replacing the values is:
(11, 14, 0, 78, 33, 'FILL', 10, 'FILL', 'FILL')

코드 설명

  • 먼저 튜플을 정의하고 콘솔에 출력합니다.
  • 중복 여부를 확인하기 위한 빈 set 객체를 하나 생성합니다.
  • 리스트 컴프리헨션으로 튜플을 순회하면서, 아직 set에 등장하지 않은 요소만 그대로 유지하고 동시에 set에 추가합니다.
  • 이미 한 번 이상 등장한 요소는 'FILL' 문자열로 대체됩니다.
  • 최종 결과를 tuple() 함수로 변환하여 변수에 할당합니다.
  • 변환된 튜플을 콘솔에 출력합니다.

조건문의 동작 원리

ele not in my_set and not my_set.add(ele) 부분이 핵심입니다. 파이썬에서 set.add() 메서드는 항상 None을 반환하므로, not my_set.add(ele)는 항상 True가 됩니다. 따라서 요소가 set에 존재하지 않으면 조건 전체가 참이 되어 원래 값을 유지하면서 해당 요소가 set에 추가되고, 이미 존재하는 요소라면 'FILL'로 대체됩니다. 이처럼 조건식 안에서 부수 효과(side effect)를 활용하는 기법은 코드가 짧아지는 장점이 있지만, 가독성을 위해 일반적인 반복문으로 작성하는 것도 좋은 선택입니다.