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

Python – 숫자 자릿수를 기준으로 리스트 항목 정렬하는 방법

리스트의 요소들을 숫자의 자릿수를 기준으로 정렬해야 하는 경우가 종종 있습니다. 이럴 때 파이썬에서는 max 함수와 더불어 sorted 메서드, lambda 함수, 그리고 문자열 메서드인 ljust를 활용하면 간단하게 해결할 수 있습니다.

예제

다음은 이를 구현한 예제입니다 −

my_list = [4344, 2611, 122, 541, 33, 892, 48292, 460, 390, 120, 10, 2909, 11239, 1]

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

print("The list after sorting is : ")
my_list.sort()
print(my_list)

my_temp_val = map(str, my_list)

my_max_length = max(map(len, my_temp_val))

my_result = sorted(my_list, key = lambda index : (str(index).ljust(my_max_length, 'a')))

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

출력

The list is :
[4344, 2611, 122, 541, 33, 892, 48292, 460, 390, 120, 10, 2909, 11239, 1]
The list after sorting is :
[1, 10, 33, 120, 122, 390, 460, 541, 892, 2611, 2909, 4344, 11239, 48292]
The resultant list is :
[10, 11239, 120, 122, 1, 2611, 2909, 33, 390, 4344, 460, 48292, 541, 892]

동작 원리

  • 정수로 이루어진 리스트를 정의하고 콘솔에 출력합니다.

  • sort() 메서드를 사용해 리스트를 오름차순으로 정렬한 뒤 콘솔에 표시합니다.

  • map 메서드를 사용해 리스트의 모든 요소를 문자열로 변환합니다.

  • 변환된 값들은 하나의 변수에 저장됩니다.

  • max 함수로 문자열로 변환된 요소들의 최대 길이를 구해 별도의 변수에 할당합니다.

  • sorted 메서드로 리스트를 정렬하며, 이때 정렬 기준(key)은 ljust로 왼쪽 정렬 처리한 값을 반환하는 람다 함수입니다.

  • 정렬된 결과는 변수에 저장됩니다.

  • 최종 결과가 콘솔에 출력됩니다.

왜 ljust가 필요할까요?

ljust(max_length, 'a')는 각 숫자를 문자열로 변환한 뒤, 모든 문자열의 길이를 동일하게 맞추기 위해 오른쪽 끝에 'a' 문자를 채워 넣습니다. 이렇게 하면 일반적인 사전식(lexicographic) 비교가 자릿수 단위로 순서대로 진행되어 의도한 정렬 결과를 얻을 수 있습니다. 예를 들어 10은 “10aaa…”로, 1은 “1aaaa…”로 변환되는데, 두 번째 문자에서 '0'이 'a'보다 사전 순으로 앞서므로 10이 1보다 앞에 위치하게 됩니다. 덕분에 숫자의 크기가 아닌 자릿수 흐름을 기준으로 한 독특한 정렬이 가능해집니다.