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

Python – 이전 요소보다 큰 요소의 개수를 기준으로 행렬 정렬하기

리스트의 리스트(행렬)를 "바로 이전 요소보다 큰 요소의 개수"를 기준으로 정렬해야 하는 경우, 함수 안에서 리스트 컴프리헨션(list comprehension)len 메서드를 활용하면 간단하게 해결할 수 있습니다.

아래는 실제 구현 예시입니다.

예제 코드

def fetch_greater_freq(row):

   return len([row[idx] for idx in range(0, len(row) - 1) if row[idx] < row[idx + 1]])

my_list = [[11, 3, 25, 99, 10], [5, 3, 25, 4], [77, 11, 5, 3, 77, 77], [11, 3, 25]]

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

my_list.sort(key=fetch_greater_freq)

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

실행 결과

The list is :
[[11, 3, 25, 99, 10], [5, 3, 25, 4], [77, 11, 5, 3, 77, 77], [11, 3, 25]]
The resultant list is :
[[5, 3, 25, 4], [77, 11, 5, 3, 77, 77], [11, 3, 25], [11, 3, 25, 99, 10]]

코드 설명

  • 'fetch_greater_freq'라는 이름의 함수가 정의되며, 하나의 리스트(row)를 매개변수로 받습니다.

  • 함수 내부에서는 리스트를 순회하면서 각 요소가 바로 다음 요소보다 작은지(<) 검사합니다.

  • 조건을 만족하는 요소들만 모은 리스트의 길이(len)가 곧 "증가하는 구간의 개수"이며, 이 값이 함수의 반환값이 됩니다.

  • 함수 외부에서는 정수로 이루어진 리스트의 리스트를 정의한 뒤, 콘솔에 출력합니다.

  • sort 메서드에 앞서 정의한 함수를 key 매개변수로 전달하면, Python은 각 행마다 반환된 값을 기준으로 오름차순 정렬을 수행합니다.

  • 마지막으로 정렬된 결과가 콘솔에 출력됩니다.

핵심 포인트

sort 메서드의 key 인자에는 함수를 전달할 수 있으며, 이 함수가 반환하는 값이 정렬의 기준이 됩니다. 위 예제에서는 각 행에서 "이전 요소보다 큰 요소"가 몇 개인지 계산한 뒤, 그 개수가 적은 행부터 순서대로 정렬됩니다. 예를 들어 [5, 3, 25, 4]는 증가 구간이 1개뿐이므로 가장 앞에, [11, 3, 25, 99, 10]은 증가 구간이 3개로 가장 많아 마지막에 배치됩니다. 이처럼 key 함수를 활용하면 복잡한 조건의 사용자 지정 정렬도 손쉽게 구현할 수 있습니다.