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

Python으로 튜플을 절대 차이의 빈도 기준으로 정렬하는 방법

튜플로 이루어진 리스트를 각 튜플 내 두 요소의 절대 차이(absolute difference)가 나타나는 빈도를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 lambda 함수, abs() 메서드, 그리고 sorted() 메서드를 함께 사용하면 간단하게 해결할 수 있습니다.

예제

아래는 이를 구현한 예시 코드입니다.

my_list = [(11, 26), (21, 33), (90, 11), (26, 21), (32, 18), (25, 37)]

print("The list is :")
print(my_list)

my_diff_list = [abs(x - y) for x, y in my_list]

my_result = sorted(my_list, key = lambda sub: my_diff_list.count(abs(sub[0] - sub[1])))

print("The resultant list is :")
print(my_result)

출력 결과

The list is :
[(11, 26), (21, 33), (90, 11), (26, 21), (32, 18), (25, 37)]
The resultant list is :
[(11, 26), (90, 11), (26, 21), (32, 18), (21, 33), (25, 37)]

코드 설명

  • 먼저 튜플들의 리스트를 정의하고, 콘솔에 출력하여 확인합니다.

  • 리스트 컴프리헨션(list comprehension)을 사용해 리스트를 순회하면서 각 튜플 내 두 요소 간의 절대 차이를 계산합니다.

  • 계산된 절대 차이 값들은 리스트 형태로 변환되어 별도의 변수에 저장됩니다.

  • 이후 sorted() 메서드를 사용해 리스트의 요소들을 다시 정렬합니다. 이때 key 매개변수에 lambda 함수를 지정하여, 각 튜플의 절대 차이가 전체 리스트에서 몇 번 등장하는지 그 빈도를 기준으로 삼습니다.

  • 정렬된 최종 결과는 변수에 할당된 후 콘솔에 출력됩니다.

참고 사항

위 방식은 각 요소마다 count()를 호출하기 때문에 리스트의 크기가 커지면 성능이 떨어질 수 있습니다. 데이터 양이 많다면 collections.Counter를 사용해 빈도를 미리 계산해 두면 더 효율적으로 처리할 수 있습니다.