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

Python – 리스트에서 만들 수 있는 동일한 값 쌍의 총 개수 구하기

리스트에 포함된 값들로 만들 수 있는 동일한 값의 쌍(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