Pythonで各要素の桁の合計に基づいてリストを並べ替える方法
Pythonでは、リストの各要素を「桁の数字」に基づいて並べ替えたいケースがあります。たとえば、各数値の桁の合計が小さい順にソートしたい場合などです。このようなときは、独自の関数を定義し、リスト内包表記と組み込み関数 sum() を組み合わせることで、簡単に実現できます。
サンプルコード
以下は、桁の合計に基づいてリストを並べ替える具体的な例です。
def sort_list_digit(my_list):
digits = [int(digit) for digit in str(my_list)]
return sum(digits)
my_list = [124, 20, 106, 35, 44]
print("The list is :")
print(my_list)
print("The result is :")
print(sorted(my_list, key=sort_list_digit))実行結果
The list is : [124, 20, 106, 35, 44] The result is : [20, 124, 106, 35, 44]
コードの解説
- まず、
sort_list_digitという名前の関数を定義します。この関数は引数として1つの数値を受け取ります。 - 関数内では、リスト内包表記を使って数値を文字列に変換し、その各文字(桁)を再び整数型
intに変換しています。 - その後、
sum()関数によって各桁の合計値を計算し、戻り値として返します。たとえば124なら1 + 2 + 4 = 7となります。 - 関数の外側では、整数のリスト
[124, 20, 106, 35, 44]を定義し、コンソールに表示します。 - 組み込み関数
sorted()を呼び出す際、key引数に先ほど定義した関数を指定することで、「桁の合計」を基準とした並べ替えが行われます。 - 各要素の桁の合計は、20 → 2、124 → 7、106 → 7、35 → 8、44 → 8 となるため、結果は
[20, 124, 106, 35, 44]の順に出力されます。
ポイントまとめ
sorted() や list.sort() の key 引数に関数を渡すことで、任意の基準によるカスタムソートが可能になります。桁の合計以外にも、絶対値や文字列の長さなど、さまざまな条件でソートしたい場合に応用できるテクニックです。
-
Pythonでリストの要素をランダムにシャッフルする方法
random.shuffle()関数を使ったリストのシャッフルPythonの標準ライブラリにはrandomモジュールが用意されており、その中のshuffle()関数を使うと、シーケンス(リストなど)の要素をランダムな順序に入れ替えることができます。重要なポイントとして、shuffle()は元のリストを直接(in-place)並べ替えます。戻り値はNoneであるため、シャッフル後の結果を確認するには、元のリスト変数そのものを参照します。基本的な使い方>>> import random >>> l1 = [aa, 22, ff, 15, 90, 5.55] &g
-
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()を呼び