스택큐힙리스트

문자열 자연 정렬을 위한 내장 함수가 있나요? 본문

카테고리 없음

문자열 자연 정렬을 위한 내장 함수가 있나요?

스택큐힙리스트 2023. 4. 12. 22:48
반응형

나는 수행하고 싶은 문자열 목록이 있습니다. natural alphabetical sort.

예를 들어, 다음 목록은 자연스럽게 정렬됩니다 (원하는 대로):

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

그리고 위 목록의 정렬된 버전은 ( # $ #!! $ ** $ &를 사용하여 얻는 것) 다음과 같습니다.

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

제가 원하는 것은 첫 번째와 같이 동작하는 정렬 함수입니다.

답변 1

PyPI에는 이를 위한 제3자 라이브러리인 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가 일반 알고리즘을 사용하기 때문에 어떤 입력을 사용하더라도 작동할 것이라는 점을 알아두시는 것이 좋습니다. 이 작업을 위해 자체 함수를 만드는 대신 라이브러리를 선택하는 이유에 대한 자세한 내용을 원한다면, natsort 문서의 How It Works 페이지, 특히 Special Cases Everywhere! 섹션을 확인해보세요.

만약 정렬 함수 대신 정렬 키가 필요하면, 아래의 수식 중 하나를 사용하세요.

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

2020년 11월 업데이트

인기있는 요청/질문 중 하나는 Windows Explorer와 같은 방식으로 정렬하는 방법은 무엇인가?입니다(또는 귀하의 운영 체제 파일 시스템 브라우저와 같은 것이 무엇이든). 따라서 7.1.0 버전 이상에서는이를 정확히 수행하는 함수인 os_sorted 라는 기능이 있습니다. Windows에서는 Windows Explorer와 동일한 순서로 정렬하며 다른 운영 체제에서는 로컬 파일 시스템 브라우저와 같이 정렬해야합니다.

>>> from natsort import os_sorted

>>> os_sorted(list_of_paths)

# your paths sorted like your file system browser

정렬 키가 필요한 경우 os_sort_keygen를 사용할 수 있습니다(또는 기본값만 필요한 경우 os_sort_key를 사용할 수 있습니다).

경고 - 이 함수를 사용하기 전에 API 설명서를 읽고 제한 사항과 최상의 결과를 얻는 방법을 이해해주십시오.

답변 2

자연 정렬(natural sort)은 문자열을 숫자 대신 문자 그대로 비교하는 정렬 방법이다. 이를 위해 많은 언어에서는 내장 함수를 제공한다.

예를 들어, Python에서는 `sorted()`와 `list.sort()` 메서드에서 `key` 인자를 사용하여 자연 정렬을 수행할 수 있다. `key`에 `natsort_keygen()` 함수를 전달하면 자연 정렬이 적용된 정렬 결과를 얻을 수 있다.

그 외에도 다른 언어에서도 자연 정렬을 수행하는 내장 함수가 존재한다. 예를 들어, PHP에서는 `natsort()` 함수가 있고, JavaScript에서도 `Intl.Collator` API를 이용하여 자연 정렬을 수행할 수 있다.

하지만, 자연 정렬은 문자열에 숫자가 포함되어 있을 때 적용되는 경우가 많기 때문에 모든 언어에서 지원되는 것은 아니다. 때로는 수작업으로 구현해야 할 때도 있다.

따라서, 자연 정렬이 필요한 경우에는 해당 언어의 내장 함수를 이용하거나, 수작업으로 구현하는 것이 좋다. 이를 통해 문자열을 더욱 효율적으로 정렬할 수 있고, 자연스러운 차례로 나열된 결과를 얻을 수 있다.

반응형
Comments