파이썬에 문자열 자연 정렬 함수가 내장되어 있나요?
조회수 1910회
파이썬 3.x를 이용하여 문자열 리스트를 자연 정렬하려고 합니다.
자연정렬 : 윈도우즈에서 파일이 정렬되는 방식
예를 들어, 아래의 리스트는 (제가 원하는) 자연 정렬된 리스트입니다.
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
그리고 아래는 일반 "정렬"된 리스트입니다.
['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
첫번째 예시와 같이 정렬해줄 수 있는 정렬 함수를 찾습니다.
1 답변
-
PyPI 라이브러리에 natsort 함수가 있습니다. 아래의 두 방법으로 원하시는 정렬을 하실 수 있습니다.
>>> from natsort import natsorted, ns >>> x = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9'] >>> natsorted(x, key=lambda y: y.lower()) ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13'] >>> natsorted(x, alg=ns.IGNORECASE) # or alg=ns.IC ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
natsort
는 일반적 알고리즘을 사용하기 때문에 어떤 입력값이든 처리할 수 있을겁니다.
만약 정렬 함수가 아닌 정렬 키가 필요하다면, 아래의 방법을 사용하세요.
>>> from natsort import natsort_keygen, ns >>> l1 = ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13'] >>> l2 = l1[:] >>> natsort_key1 = natsort_keygen(key=lambda y: y.lower()) >>> l1.sort(key=natsort_key1) >>> l1 ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13'] >>> natsort_key2 = natsort_keygen(alg=ns.IGNORECASE) >>> l2.sort(key=natsort_key2) >>> l2 ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
댓글 입력