리스트의 각 행을 K의 배수가 포함된 개수를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때 리스트 컴프리헨션(list comprehension)과 나머지 연산자(%)를 활용한 함수를 정의하면 간단하게 해결할 수 있습니다.
아래 예제를 통해 실제 동작 방식을 살펴보겠습니다.
예제 코드
def multiple_sort_val(row):
return len([ele for ele in row if ele % K == 0])
my_list = [[11, 44, 7, 11], [7, 5, 44, 11], [11, 6, 35, 44], [92, 92, 5]]
print("The list is :")
print(my_list)
K = 11
print("The value for K is ")
print(K)
my_list.sort(key=multiple_sort_val)
print("The resultant list is :")
print(my_list)실행 결과
The list is : [[11, 44, 7, 11], [7, 5, 44, 11], [11, 6, 35, 44], [92, 92, 5]] The value for K is 11 The resultant list is : [[92, 92, 5], [7, 5, 44, 11], [11, 6, 35, 44], [11, 44, 7, 11]]
코드 설명
먼저 리스트를 매개변수로 받는
multiple_sort_val함수를 정의합니다.함수 내부에서는 리스트 컴프리헨션과
len()메서드를 사용하여, 각 요소를 K로 나눴을 때 나머지가 0이 되는(즉, K의 배수인) 요소만 모은 뒤 그 개수를 계산합니다.계산된 K의 배수 개수가 해당 행의 정렬 기준값으로 반환됩니다.
함수 외부에서는 리스트 안에 여러 개의 리스트가 중첩된 구조(리스트의 리스트)를 정의하고 콘솔에 출력합니다.
정렬 기준으로 사용할 K 값을 정의한 후 콘솔에 함께 출력합니다.
sort()메서드를 호출하면서key인자에 앞서 정의한 함수를 지정하여, 각 행에 포함된 K의 배수 개수를 기준으로 오름차순 정렬을 수행합니다.정렬이 완료된 최종 결과 리스트가 콘솔에 출력됩니다.
위 실행 결과를 보면, K=11일 때 [92, 92, 5]는 11의 배수가 하나도 없어 가장 앞에 위치하고, [11, 44, 7, 11]은 11의 배수가 세 개(11, 44, 11)로 가장 많아 마지막에 정렬된 것을 확인할 수 있습니다.