파이썬에 문자열 자연 정렬 함수가 내장되어 있나요?
sorting
python
python3
파이썬 3.x를 이용하여 문자열 리스트를 자연 정렬하려고 합니다.
자연정렬 : 윈도우즈에서 파일이 정렬되는 방식
예를 들어, 아래의 리스트는 (제가 원하는) 자연 정렬된 리스트입니다.
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
그리고 아래는 일반 "정렬"된 리스트입니다.
['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
첫번째 예시와 같이 정렬해줄 수 있는 정렬 함수를 찾습니다.
-
2016년 06월 13일에 작성됨
조회수 529
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']
-
2016년 06월 14일에 작성됨
출처: https://stackoverflow.com/questions/4836710 이 질문은 저작자표시-동일조건변경허락(https://creativecommons.org/licenses/by-sa/3.0/deed.ko) 라이센스로 이용할 수 있습니다. 장대엽 2018.3.20 10:51