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

파이썬으로 인접 요소 차이의 합을 기준으로 행렬 행 정렬하기

리스트(행렬) 안에 여러 개의 행이 있을 때, 각 행에서 인접한 두 요소 간 차이의 절댓값 합을 기준으로 행들을 오름차순으로 정렬해야 하는 경우가 있습니다. 파이썬에서는 사용자 정의 함수를 만들고 이를 sort() 메서드의 key 인자로 전달하는 방식으로 손쉽게 구현할 수 있습니다.

예제 코드

아래 예제는 위 방식을 실제로 구현한 것입니다.

def diff_summation_elem(row):
   return sum([abs(row[index + 1] - row[index]) for index in range(0, len(row) - 1)])

my_list = [[97, 6, 47, 3], [6, 88, 3, 26], [71, 53, 34, 65], [15, 36, 5,62]]

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

my_list.sort(key=diff_summation_elem)

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

실행 결과

The list is :
[[97, 6, 47, 3], [6, 88, 3, 26], [71, 53, 34, 65], [15, 36, 5, 62]]
The resultant list is :
[[71, 53, 34, 65], [15, 36, 5, 62], [97, 6, 47, 3], [6, 88, 3, 26]]

코드 설명

  • 먼저 diff_summation_elem이라는 이름의 함수를 정의합니다. 이 함수는 하나의 리스트(행)를 매개변수로 받습니다.

  • 함수 내부에서는 리스트 컴프리헨션(list comprehension)과 함께 내장 함수인 abs()sum()을 사용하여, 리스트를 순회하면서 인접한 두 요소의 차이 절댓값을 모두 더한 값을 반환합니다.

  • 함수 외부에서는 리스트 안에 리스트가 포함된 중첩 리스트(행렬)를 정의하고, 이를 콘솔에 출력합니다.

  • sort() 메서드를 호출할 때 key 인자로 앞서 정의한 함수를 지정하면, 각 행은 '인접 요소 차이의 합'을 기준으로 오름차순 정렬됩니다.

  • 마지막으로 정렬된 결과 리스트를 콘솔에 출력합니다.

정렬 기준 계산 과정 살펴보기

결과를 더 명확히 이해하기 위해 각 행의 차이 합을 직접 계산해 보겠습니다.

  • [71, 53, 34, 65] → |53-71| + |34-53| + |65-34| = 18 + 19 + 31 = 68

  • [15, 36, 5, 62] → |36-15| + |5-36| + |62-5| = 21 + 31 + 57 = 109

  • [97, 6, 47, 3] → |6-97| + |47-6| + |3-47| = 91 + 41 + 44 = 176

  • [6, 88, 3, 26] → |88-6| + |3-88| + |26-3| = 82 + 85 + 23 = 190

따라서 차이 합이 작은 순서대로 68 → 109 → 176 → 190 순으로 행이 배치되어, 실행 결과와 일치함을 확인할 수 있습니다.