数字を含む文字列の自然な並べ替え
数字を含む文字列を並べ替える場合、デフォルトの並べ替え方法では望ましい結果が得られない場合があります。たとえば、文字列 "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 サイトの他の関連記事を参照してください。