Python – 文字列リストを文字列内の数値部分で並べ替える方法
文字列のリストを、各文字列に含まれる数値部分に基づいて並べ替えたい場合には、正規表現と「findall」メソッドを組み合わせて使用します。
サンプルコード
以下に具体的な実装例を示します。
import re
def my_num_sort(my_str):
return list(map(int, re.findall(r'\d+', my_str)))[0]
my_list = ["pyth42on", '14is', '32fun', '89to', 'lea78rn']
print("The list is :")
print(my_list)
my_list.sort(key=my_num_sort)
print("The result is :")
print(my_list)実行結果
The list is : ['pyth42on', '14is', '32fun', '89to', 'lea78rn'] The result is : ['14is', '32fun', 'pyth42on', 'lea78rn', '89to']
処理の解説
まず、必要なパッケージ(re モジュール)を環境にインポートします。
次に、文字列を引数として受け取る関数を定義します。
この関数内では、「findall」メソッドを使って特定のパターン(ここでは1桁以上の連続した数字)に一致する部分を抽出します。
抽出された値は「map」メソッドによって整数型に変換され、さらに「list」に変換されます。
そのリストの最初の要素([0])が、関数の戻り値として返されます。
関数の外側では、文字列のリストを定義し、コンソールに表示します。
リストに対して「sort」メソッドを呼び出し、key 引数に先ほど定義した関数を指定することで、数値部分を基準にソートを行います。
最後に、ソートされたリストをコンソールに出力して完了です。
ポイント
正規表現パターン r'\d+' は「1桁以上の連続した数字」にマッチします。これにより、文字列中に英字と数字が混在していても、数値部分だけを正確に取り出すことができます。
また、[0] を付けることで、複数の数値が含まれる場合でも最初の数値のみをソートキーとして使用しています。用途に応じて、すべての数値をタプルとして返すように変更すれば、より柔軟なソートも可能です。
-
Pythonで日付文字列のリストを並べ替える方法
Pythonで日付形式の文字列が格納されたリストを正しく並べ替えるには、sort関数を使うだけでは不十分です。日付文字列は辞書順に比較されるため、そのままソートすると意図した順序になりません。そこで、各日付文字列をdatetimeオブジェクトに変換し、その値を基準にソートする必要があります。具体的には、sort関数のkey引数を利用します。key引数にはラムダ式(無名関数)を渡し、その中でdatetime.strptime()を使って各日付文字列をdatetimeオブジェクトに変換します。こうすることで、Pythonはこのdatetimeオブジェクト同士を比較してリストを時系列順に並べ替えてく
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>