문자열 내의 숫자를 기준으로 정렬하려는 이러한 유형의 정렬을 자연 정렬 또는 휴먼 정렬이라고 합니다. 예를 들어 다음과 같은 텍스트가 있는 경우:
['Hello1','Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
그런 다음 정렬된 목록을 다음과 같이 지정합니다.
['Hello1', 'Hello2','Hello12', 'Hello17', 'Hello25', 'Hello29']
['Hello1','Hello12', 'Hello17', 'Hello2', 'Hello25', 'Hello29']
이를 위해 sort()가 사용하는 추가 매개변수를 사용할 수 있습니다. 목록의 항목에서 키를 계산하기 위해 호출되는 함수입니다. 정규식을 사용하여 문자열에서 숫자를 추출하고 텍스트와 숫자를 모두 기준으로 정렬합니다.
import re def atoi(text): return int(text) if text.isdigit() elsetext def natural_keys(text): return [ atoi(c) for c in re.split('(\d+)',text) ] my_list =['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25'] my_list.sort(key=natural_keys) print my_list
이렇게 하면 결과가 표시됩니다.
['Hello1','Hello2', 'Hello12', 'Hello17', 'Hello25', 'Hello29']