PythonでリストをKの倍数の個数に基づいて並べ替える方法
Pythonでは、ネストされたリスト(行)を「Kの倍数が含まれる個数」に基づいて並べ替えたいケースがあります。このような場合、リスト内包表記と剰余演算子(%)を組み合わせた関数を定義し、それをsort()メソッドのキーとして指定することで実現できます。
以下に具体的な実装例を示します。
サンプルコード
def multiple_sort_val(row):
return len([ele for ele in row if ele % K == 0])
my_list = [[11, 44, 7, 11], [7, 5, 44, 11], [11, 6, 35, 44], [92, 92, 5]]
print("元のリスト:")
print(my_list)
K = 11
print("Kの値:")
print(K)
my_list.sort(key=multiple_sort_val)
print("並べ替え後のリスト:")
print(my_list)
出力結果
元のリスト: [[11, 44, 7, 11], [7, 5, 44, 11], [11, 6, 35, 44], [92, 92, 5]] Kの値: 11 並べ替え後のリスト: [[92, 92, 5], [7, 5, 44, 11], [11, 6, 35, 44], [11, 44, 7, 11]]
処理の解説
まず、リストを引数として受け取る関数
multiple_sort_valを定義します。この関数内では、リスト内包表記を使って各行の要素を走査し、特定の値Kで割った余りが0になる(つまりKの倍数である)要素だけを抽出した新しいリストを作成します。
len()メソッドでそのリストの長さ(Kの倍数の個数)を取得し、戻り値として返します。関数の外側では、リストのリスト(ネストされたリスト)を定義し、コンソールに表示します。
基準となる値Kを設定し、こちらもコンソールに出力します。
sort()メソッドを呼び出す際、引数keyに先ほど定義した関数を指定します。これにより、各行に含まれるKの倍数の個数が昇順になるようにリスト全体が並べ替えられます。最後に、並べ替えられた結果がコンソールに表示されます。
なお、Pythonのsort()は安定ソート(Stable Sort)であるため、Kの倍数の個数が同じ行同士は、元の順序が保持される点にも注目してください。降順で並べ替えたい場合は、my_list.sort(key=multiple_sort_val, reverse=True)のようにreverse=Trueを指定するだけで対応できます。
-
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() >>>