実行したい文字列のリストがあります自然なアルファベット順。
たとえば、次のリストは自然にソートされています(私が望んでいるもの)。
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
そして、これが上記のリストの「ソートされた」バージョンです(私が使用したものはsorted()
):
['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
最初のものと同じように動作するソート関数を探しています。
ベストアンサー1
PyPIにはこれ用のサードパーティライブラリがあります。ナソート(完全な開示として、私はこのパッケージの作成者です)。あなたの場合は、次のいずれかを実行できます。
>>> from natsort import natsorted, ns
>>> x = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
>>> natsorted(x, key=lambda y: y.lower())
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
>>> natsorted(x, alg=ns.IGNORECASE) # or alg=ns.IC
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
natsort
一般的なアルゴリズムを使用しているので、どのような入力に対しても機能するはずです。独自の関数を作成するのではなく、ライブラリを選択する理由について詳しく知りたい場合は、ドキュメントをご覧natsort
ください。使い方ページ、特にどこにでも特別なケースが!セクション。
並べ替え関数ではなく並べ替えキーが必要な場合は、以下のいずれかの式を使用します。
>>> from natsort import natsort_keygen, ns
>>> l1 = ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
>>> l2 = l1[:]
>>> natsort_key1 = natsort_keygen(key=lambda y: y.lower())
>>> l1.sort(key=natsort_key1)
>>> l1
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
>>> natsort_key2 = natsort_keygen(alg=ns.IGNORECASE)
>>> l2.sort(key=natsort_key2)
>>> l2
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
2020年11月更新
「Windowsエクスプローラー(またはオペレーティングシステムのファイルシステムブラウザ)のように並べ替えるにはどうしたらいいですか?」というリクエストや質問がよくあるので、natsort
バージョン7.1.0では、os_sorted
まさにこれを実行します。Windows では、Windows エクスプローラーと同じ順序で並べ替えられ、他のオペレーティング システムでは、ローカル ファイル システム ブラウザーと同じように並べ替えられます。
>>> from natsort import os_sorted
>>> os_sorted(list_of_paths)
# your paths sorted like your file system browser
ソートキーが必要な場合は、 を使用できますos_sort_keygen
(または、os_sort_key
デフォルトだけが必要な場合)。
注意- 制限事項と最良の結果を得る方法を理解するために、使用する前にこの関数の API ドキュメントをお読みください。