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

Python – 리스트 요소의 순위(Rank)를 계산하는 방법

데이터 구조에서 각 요소의 인덱스 순위(rank)를 구해야 하는 경우가 있습니다. 이럴 때 리스트를 매개변수로 받아 처리하는 메서드를 정의하면 됩니다. 해당 메서드는 리스트의 모든 요소를 반복하면서 다른 요소들과 크기를 비교하고, 그 결과에 따라 두 개의 변수 값을 갱신하여 최종 순위를 계산합니다.

이 코드의 핵심은 중복 값 처리입니다. 작은 값의 개수를 세는 변수 'r'과 동일한 값의 개수를 세는 변수 's'를 활용해, 같은 값을 가진 요소들에게는 평균 순위를 부여함으로써 보다 공정한 순위 산정이 가능합니다.

예제 코드

다음은 리스트 요소의 순위를 계산하는 예제입니다.

def find_rank_elem(my_list):
   my_result = [0 for x in range(len(my_list))]
   for elem in range(len(my_list)):
      (r, s) = (1, 1)
      for j in range(len(my_list)):
         if j != elem and my_list[j] < my_list[elem]:
            r += 1
         if j != elem and my_list[j] == my_list[elem]:
            s += 1

      my_result[elem] = r + (s - 1) / 2

   return my_result

my_list = [1, 3, 5, 3, 1, 26, 99, 45, 67, 12]
print("The list is :")
print(my_list)
print("The resultant list is :")
print(find_rank_elem(my_list))

실행 결과

The list is :
[1, 3, 5, 3, 1, 26, 99, 45, 67, 12]
The resultant list is :
[1, 3, 5, 3, 1, 7, 10, 8, 9, 6]

코드 설명

  • 'find_rank_elem'이라는 이름의 메서드를 정의하고, 리스트를 매개변수로 받습니다.

  • 리스트의 길이만큼 0으로 초기화된 결과 리스트를 생성합니다.

  • 리스트를 반복하면서 각 요소를 기준으로 삼고, 내부 반복문에서 나머지 요소들과 비교합니다.

  • 기준 요소보다 작은 값이 발견되면 'r'을 증가시키고, 동일한 값이 발견되면 's'를 증가시킵니다.

  • 'r + (s - 1) / 2' 공식을 통해 중복 값을 가진 요소들의 평균 순위를 계산하여 결과 리스트에 저장합니다.

  • 모든 연산이 끝나면 결과 리스트를 반환합니다.

  • 메서드 외부에서 리스트를 정의하고 콘솔에 출력한 뒤, 해당 리스트를 인자로 전달하며 메서드를 호출합니다.

  • 최종 결과가 콘솔에 출력됩니다.

예제에서 볼 수 있듯이, 값이 1인 요소 두 개는 모두 순위 1을, 값이 3인 요소 두 개는 모두 순위 3을 받게 됩니다. 이처럼 동점 요소에 동일한 순위를 부여하는 방식은 경기 순위표나 통계 분석에서 유용하게 활용할 수 있습니다.