ホームページ >バックエンド開発 >Python チュートリアル >Python で数値が埋め込まれた文字列を自然に並べ替えるにはどうすればよいですか?

Python で数値が埋め込まれた文字列を自然に並べ替えるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-10 09:43:14673ブラウズ

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

order:

['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']

ナチュラル キーの機能を利用することで、数値が埋め込まれた文字列を人間が判読できる方法で簡単に配置できるようになり、データ操作タスクがより効率的かつ直感的になります。

以上がPython で数値が埋め込まれた文字列を自然に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。