Pythonで数字の桁に基づいてリストの要素を並べ替える方法
リスト内の数値を「桁の並び」に基づいて並べ替えたい場合には、max メソッドが活躍します。さらに、sorted メソッド、lambda 関数、そして ljust メソッドを組み合わせることで、通常の数値順とは異なる、桁ごとの比較によるソートが実現できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = [4344, 2611, 122, 541, 33, 892, 48292, 460, 390, 120, 10, 2909, 11239, 1]
print("The list is : " )
print(my_list)
print("The list after sorting is : " )
my_list.sort()
print(my_list)
my_temp_val = map(str, my_list)
my_max_length = max(map(len, my_temp_val))
my_result = sorted(my_list, key = lambda index : (str(index).ljust(my_max_length, 'a')))
print("The resultant list is : ")
print(my_result)実行結果
The list is : [4344, 2611, 122, 541, 33, 892, 48292, 460, 390, 120, 10, 2909, 11239, 1] The list after sorting is : [1, 10, 33, 120, 122, 390, 460, 541, 892, 2611, 2909, 4344, 11239, 48292] The resultant list is : [10, 11239, 120, 122, 1, 2611, 2909, 33, 390, 4344, 460, 48292, 541, 892]
処理の解説
まず、整数のリストを定義し、コンソールに表示します。
sortメソッドを使ってリストを昇順に並べ替え、その結果をコンソールに表示します。mapメソッドを使用して、リスト内のすべての要素を文字列に変換します。変換した結果は変数に代入されます。
次に、リスト内の要素のうち最も長い桁数(文字列の最大長)を
maxメソッドで求め、変数に格納します。sortedメソッドでリストを並べ替えます。このとき、キーとしてljustによる左寄せ(パディング)を行うlambda関数を指定します。すべての文字列を同じ長さに揃えることで、先頭の桁から順に比較できるようになり、その結果が変数に代入されます。
最後に、並べ替えた結果をコンソールに出力して完了です。
ポイント
ljust メソッドは、文字列を指定した幅になるまで右側を特定の文字(ここでは 'a')で埋めます。これにより桁数の異なる数値同士でも公平に比較できるため、「先頭の桁が小さいものほど前に来る」という独自の並び順を実現できます。通常の sort() の結果と見比べてみると、挙動の違いがよく分かります。
-
Pythonでリストを並べ替える方法を解説!sortとsortedの使い分けからkey引数まで
Pythonでは、整数・浮動小数点数・文字列などのリストは、sortメソッドを呼び出すだけで簡単に並べ替えができます。また、降順(逆順)でソートしたい場合は、reverseパラメータにTrueを指定するだけです。sortメソッドを使った基本的な並べ替えまずは、昇順と降順それぞれのソート例を見てみましょう。my_list = [1, 5, 2, 6, 0] my_list.sort() print(my_list) my_list.sort(reverse=True) print(my_list)出力結果[0, 1, 2, 5, 6] [6, 5, 2, 1, 0]このように、sort()を呼び
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>