Python에서 각 행(row)에 포함된 문자 개수의 총합을 기준으로 행렬(2차원 리스트)을 정렬해야 하는 경우가 있습니다. 이럴 때는 별도의 함수를 정의한 뒤, sort() 메서드의 key 인자로 전달하면 간단하게 해결할 수 있습니다.
정렬 기준이 되는 함수는 리스트 컴프리헨션(list comprehension)과 sum(), len() 메서드를 활용하여 각 행의 문자 수 총합을 계산합니다.
아래에서 실제 동작 예시를 살펴보겠습니다.
예제 코드
def total_characters(row):
return sum([len(element) for element in row])
my_list = [["pyt", "is", "fun"], ["python", "fun"],["py", "4", "good"], ["python"]]
print("The list is :")
print(my_list)
my_list.sort(key=total_characters)
print("The result is :")
print(my_list)출력 결과
The list is : [['pyt', 'is', 'fun'], ['python', 'fun'], ['py', '4', 'good'], ['python']] The result is : [['python'], ['py', '4', 'good'], ['pyt', 'is', 'fun'], ['python', 'fun']]
코드 설명
total_characters라는 이름의 함수를 정의합니다. 이 함수는 행(row)을 매개변수로 받아 해당 행의 문자 개수 총합을 반환합니다.리스트 컴프리헨션을 사용하여 행 내부의 각 요소를 순회하고,
len()으로 각 요소의 길이를 구한 뒤sum()으로 모두 더합니다.함수 외부에서 2차원 리스트를 정의하고, 콘솔에 출력하여 원본 상태를 확인합니다.
sort()메서드를 호출하면서key=total_characters를 전달하여, 각 행의 문자 개수 총합을 기준으로 오름차순 정렬을 수행합니다.정렬된 결과는 원본 리스트에 그대로 반영되며, 최종 결과가 콘솔에 출력됩니다.
참고 사항
위 예제에서 각 행의 문자 개수 총합은 다음과 같습니다.
['python']→ 6자['py', '4', 'good']→ 7자['pyt', 'is', 'fun']→ 8자['python', 'fun']→ 10자
만약 원본 리스트를 유지한 채 새로운 정렬된 리스트를 얻고 싶다면, sorted(my_list, key=total_characters)를 사용하는 것이 좋습니다. 또한 내림차순으로 정렬하려면 reverse=True 옵션을 추가하면 됩니다.