파이썬에 문자열 자연 정렬 함수가 내장되어 있나요?


파이썬 3.x를 이용하여 문자열 리스트를 자연 정렬하려고 합니다.

자연정렬 : 윈도우즈에서 파일이 정렬되는 방식

예를 들어, 아래의 리스트는 (제가 원하는) 자연 정렬된 리스트입니다.

['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']

그리고 아래는 일반 "정렬"된 리스트입니다.

['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']

첫번째 예시와 같이 정렬해줄 수 있는 정렬 함수를 찾습니다.

  • 2016년 06월 13일에 작성됨

조회수 118


1 답변


좋아요
0
싫어요
채택취소하기

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일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close