ホームページ > バックエンド開発 > Python チュートリアル > Python で数値と浮動小数点を含む文字列の自然な並べ替えを実装するにはどうすればよいですか?

Python で数値と浮動小数点を含む文字列の自然な並べ替えを実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-02 08:54:09
オリジナル
595 人が閲覧しました

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']
ログイン後にコピー

Float の処理:

を含む文字列を並べ替えるにはfloat の場合は、natural_keys の正規表現を float に一致するように変更します:

def natural_keys(text):
    return [atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
ログイン後にコピー

以上がPython で数値と浮動小数点を含む文字列の自然な並べ替えを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート