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

Python – None 값의 빈도를 기준으로 행렬 정렬하는 방법

파이썬에서 행렬(리스트의 리스트)을 각 행에 포함된 None 값의 개수, 즉 빈도를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 별도의 함수를 정의한 뒤, 리스트 컴프리헨션과 not 연산자, len 메서드를 조합해 None의 개수를 계산하고, 그 결과를 sort 메서드의 key로 지정하면 손쉽게 해결할 수 있습니다.

예제 코드

아래는 None 빈도를 기준으로 행렬을 정렬하는 방법을 보여주는 예제입니다.

def get_None_freq(row):
   return len([element for element in row if not element])

my_list = [[None, 24], [None, 33, 3, None],[42, 24, 55], [13, None, 24]]

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

my_list.sort(key = get_None_freq)

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

실행 결과

The list is :
[[None, 24], [None, 33, 3, None], [42, 24, 55], [13, None, 24]]
The result is :
[[42, 24, 55], [None, 24], [13, None, 24], [None, 33, 3, None]]

코드 설명

  • get_None_freq라는 이름의 함수를 정의합니다. 이 함수는 리스트를 매개변수로 받아, 리스트 컴프리헨션으로 각 요소를 순회하면서 not 연산자를 사용해 해당 요소가 None인지 판별한 후, 그 개수(길이)를 구합니다.

  • 계산된 None의 개수가 함수의 반환값이 됩니다.

  • 함수 외부에서는 여러 개의 행을 가진 리스트(행렬)를 정의하고 콘솔에 출력합니다.

  • sort 메서드를 호출할 때 key 인자에 앞서 정의한 함수를 지정하여, 각 행의 None 개수를 기준으로 오름차순 정렬을 수행합니다.

  • 정렬이 완료된 결과가 콘솔에 출력됩니다.

실행 결과를 보면 None이 하나도 없는 [42, 24, 55]가 가장 앞에 위치하고, None이 두 개 포함된 [None, 33, 3, None]이 가장 뒤에 배치되는 것을 확인할 수 있습니다. 즉, None 개수가 적은 행부터 차례대로 정렬됩니다. 내림차순으로 정렬하고 싶다면 sort 메서드에 reverse=True 옵션을 추가하면 됩니다.