> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 숫자가 포함된 문자열을 자연스럽게 정렬하려면 어떻게 해야 합니까?

Python에서 숫자가 포함된 문자열을 자연스럽게 정렬하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-10 09:43:14
원래의
703명이 탐색했습니다.

How Can I Sort Strings with Embedded Numbers Naturally in Python?

자연 정렬: 숫자를 포함하여 문자열을 정렬하는 기술

숫자로 문자열을 정렬하는 것은 까다로운 작업일 수 있지만 많은 사람들에게 필수적입니다. 응용 프로그램. 이 Q&A에서는 "something1", "something2", "something17"과 같은 문자열을 논리적 순서로 정렬할 수 있어 인간과 유사한 정렬 결과를 얻을 수 있는 솔루션을 살펴보겠습니다.

과제:

주어진 입력은 숫자가 포함된 문자열 목록으로 구성됩니다. 그러나 기본 sort() 메서드는 사람이 이해할 수 있는 방식으로 정렬하지 못합니다. 예를 들어 다음 목록은

something1
something12
something17
something2
something25
something29
로그인 후 복사
로그인 후 복사

다음과 같이 정렬됩니다.

something1
something12
something17
something2
something25
something29
로그인 후 복사
로그인 후 복사

해결책: 자연 키

해결책은 다음과 같습니다. 사람이 쉽게 읽을 수 있도록 설계된 정렬 방법인 자연 키를 사용합니다. 자연 키는 문자열의 전체 구조를 유지하면서 문자열 내의 숫자를 별도의 엔터티로 처리합니다.

다음은 natural_keys 함수를 사용하는 Python 구현입니다.

import re

def natural_keys(text):
    return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
로그인 후 복사

입력 목록에 적용하면 결과는 다음과 같습니다.

['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
로그인 후 복사

추가 고려 사항:

부동 소수점 숫자로 문자열을 정렬해야 하는 경우 정수 대신 부동 소수점과 일치하도록 natural_keys 함수의 정규식을 수정할 수 있습니다.

def natural_keys(text):
    return [float(c) if c.isdigit() or '.' in c else c for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
로그인 후 복사

이 개선 사항 다음과 같은 문자열을 정렬할 수 있습니다:

something1
something2
something1.0
something1.25
something1.105
로그인 후 복사

순서:

['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
로그인 후 복사

자연 키의 힘을 활용함으로써 이제 사람이 읽을 수 있는 방식으로 숫자가 포함된 문자열을 쉽게 배열할 수 있으므로 데이터 조작 작업이 더욱 효율적이고 직관적이게 됩니다.

위 내용은 Python에서 숫자가 포함된 문자열을 자연스럽게 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿