리스트에 포함된 값들로 만들 수 있는 동일한 값의 쌍(equal pairs)이 총 몇 개인지 구해야 하는 경우가 있습니다. 이럴 때 'set'과 '//'(정수 나눗셈) 연산자를 반복문과 함께 사용하면 간단하게 해결할 수 있습니다.
예제 코드
아래는 실제 구현 예시입니다.
my_list = [34, 56, 12, 32, 78, 99, 67, 34, 52, 78, 99, 10, 0, 11, 23, 9]
print("The list is :")
print(my_list)
all_elems = set(my_list)
my_result = 0
for elements in all_elems:
my_result += my_list.count(elements) // 2
print("The total pairs are :")
print(my_result)실행 결과
The list is : [34, 56, 12, 32, 78, 99, 67, 34, 52, 78, 99, 10, 0, 11, 23, 9] The total pairs are : 3
코드 설명
리스트를 정의하고 콘솔에 출력합니다.
리스트를
set()으로 변환하여 변수에 할당합니다. 이 과정에서 중복이 제거되어 고유한 요소만 남게 됩니다.결과를 저장할 정수 변수를 0으로 초기화합니다.
set의 각 고유 요소를 순회하면서, 해당 요소가 원래 리스트에 몇 번 등장하는지
count()로 확인한 뒤//연산자로 2를 나눕니다. 이 몫이 곧 해당 값으로 만들 수 있는 쌍의 개수입니다.계산된 쌍의 개수를 결과 변수에 누적으로 더합니다.
최종 결과를 콘솔에 출력합니다. 위 예제에서는 34, 78, 99가 각각 두 번씩 등장하므로 총 3개의 쌍이 만들어집니다.
참고: 더 효율적인 방법
count() 메서드는 요소 하나당 리스트 전체를 탐색해야 하므로 전체 시간 복잡도가 O(n²)입니다. 데이터 크기가 큰 경우에는 collections.Counter를 사용하면 O(n)으로 성능을 개선할 수 있습니다.
from collections import Counter
my_list = [34, 56, 12, 32, 78, 99, 67, 34, 52, 78, 99, 10, 0, 11, 23, 9]
counts = Counter(my_list)
total_pairs = sum(c // 2 for c in counts.values())
print("The total pairs are :", total_pairs) # 출력: 3