> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 숫자와 부동 소수점이 포함된 문자열에 대한 자연 정렬을 어떻게 구현할 수 있습니까?

Python에서 숫자와 부동 소수점이 포함된 문자열에 대한 자연 정렬을 어떻게 구현할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-02 08:54:09
원래의
597명이 탐색했습니다.

How Can I Implement Natural Sorting for Strings Containing Numbers and Floats in Python?

숫자가 포함된 문자열의 자연 정렬

숫자가 포함된 문자열을 정렬할 때 기본 정렬 방법으로는 원하는 결과가 나오지 않을 수 있습니다. 예를 들어, 문자열 "something12"는 "something2" 앞이 아닌 뒤에 배치될 수 있습니다.

이를 수정하기 위해 문자열 내의 숫자를 고려하는 자연 정렬을 사용할 수 있습니다. 방법은 다음과 같습니다.

필요한 모듈 가져오기:

먼저 정규식 처리를 위해 re 모듈을 가져옵니다.

import re
로그인 후 복사

정의 도우미 기능:

도우미를 정의합니다. 문자열을 정수 및 부동 소수점으로 변환하는 함수:

def atoi(text):
    return int(text) if text.isdigit() else text

def atof(text):
    try:
        retval = float(text)
    except ValueError:
        retval = text
    return retval
로그인 후 복사

자연 정렬 함수 정의:

natural_keys 함수는 정규식을 사용하여 문자열을 구성 부분으로 분할합니다.

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

자연으로 분류하기 키:

정렬을 위한 키로 natural_keys 함수를 활용하면 문자열이 자연 순서로 배치됩니다.

alist = ["something1", "something12", "something17", "something2", "something25", "something29"]
alist.sort(key=natural_keys)
print(alist)
로그인 후 복사

출력:

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

부동 소수점 처리:

다음을 포함하는 문자열을 정렬하려면 floats, floats와 일치하도록 natural_keys의 정규식을 수정합니다:

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

위 내용은 Python에서 숫자와 부동 소수점이 포함된 문자열에 대한 자연 정렬을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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