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

조회수 1300회

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

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

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

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

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

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

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

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']
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.