파이썬에서 행렬(리스트의 리스트)을 가장 긴 문자열 길이를 기준으로 정렬해야 하는 경우가 있습니다. 이때는 리스트를 매개변수로 받는 별도의 함수를 정의하고, 리스트 컴프리헨션(list comprehension)과 함께 내장 함수인 max와 len을 활용하여 각 행의 최대 문자열 길이를 계산한 뒤, 이 값을 정렬 기준(key)으로 사용하면 됩니다.
예제 코드
def max_length(row):
return max([len(element) for element in row])
my_matrix = [['pyt', 'fun'], ['python'], ['py', 'cool'], ['py', 'ea']]
print("The matrix is :")
print(my_matrix)
my_matrix.sort(key=max_length)
print("The result is :")
print(my_matrix)실행 결과
The matrix is : [['pyt', 'fun'], ['python'], ['py', 'cool'], ['py', 'ea']] The result is : [['py', 'ea'], ['pyt', 'fun'], ['py', 'cool'], ['python']]
코드 설명
max_length라는 이름의 함수를 정의합니다. 이 함수는 리스트를 매개변수로 받아, 리스트 컴프리헨션을 통해 각 요소의 길이(len)를 구한 후,max함수로 그중 가장 긴 문자열의 길이를 반환합니다.함수 외부에서는 여러 개의 리스트를 요소로 가지는 행렬 형태의 리스트를 정의하고, 콘솔에 출력하여 원본 상태를 확인합니다.
sort()메서드 호출 시key=max_length옵션을 지정하여, 앞서 정의한 함수의 반환값(각 행의 최대 문자열 길이)을 기준으로 오름차순 정렬을 수행합니다.정렬된 결과는 다시 콘솔에 출력됩니다. 실행 결과를 보면, 최대 문자열 길이가 2인
['py', 'ea']부터 시작해 3, 4, 6 순서로 행들이 재배치된 것을 확인할 수 있습니다.
추가 팁: lambda 활용하기
별도의 함수를 정의하지 않고 lambda 표현식을 사용하면 코드를 더욱 간결하게 작성할 수 있습니다.
my_matrix.sort(key=lambda row: max(len(e) for e in row))
두 방식 모두 동일한 결과를 반환하며, 상황에 따라 가독성과 재사용성을 고려해 선택하면 됩니다.