自然な並べ替え: 数値が埋め込まれた文字列を配置する技術
数値を含む文字列の並べ替えは難しい作業ですが、多くの人にとって不可欠ですアプリケーション。この 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
order:
['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
ナチュラル キーの機能を利用することで、数値が埋め込まれた文字列を人間が判読できる方法で簡単に配置できるようになり、データ操作タスクがより効率的かつ直感的になります。
以上がPython で数値が埋め込まれた文字列を自然に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。