튜플로 이루어진 리스트를 각 튜플 내 두 요소의 절대 차이(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를 사용해 빈도를 미리 계산해 두면 더 효율적으로 처리할 수 있습니다.