Pythonで合計文字数に基づいてマトリックス(ネストされたリスト)をソートする方法
Pythonでは、ネストされたリスト(マトリックス)の各行に含まれる要素の文字数の合計を基準にして並べ替えることができます。この処理には、sort()メソッドのkey引数と、リスト内包表記、さらに組み込み関数であるsum()とlen()を組み合わせるのが効果的です。
以下に具体的な実装例を示します。
サンプルコード
def total_characters(row):
return sum([len(element) for element in row])
my_list = [["pyt", "is", "fun"], ["python", "fun"], ["py", "4", "good"], ["python"]]
print("元のリスト:")
print(my_list)
my_list.sort(key=total_characters)
print("ソート後の結果:")
print(my_list)
実行結果
元のリスト: [['pyt', 'is', 'fun'], ['python', 'fun'], ['py', '4', 'good'], ['python']] ソート後の結果: [['python'], ['py', '4', 'good'], ['pyt', 'is', 'fun'], ['python', 'fun']]
コードの解説
total_charactersという関数を定義します。この関数は行(リスト)を引数として受け取り、その行内の全要素の文字数の合計を返します。リスト内包表記を使って各行の各要素を順番に取り出し、
len()でそれぞれの長さを取得し、sum()でそれらを合計しています。関数の外側で、複数の文字列リストを含むネストされたリストを定義し、コンソールに表示します。
sort()メソッドを呼び出す際に、key=total_charactersを指定することで、各行の文字数合計を比較基準として昇順にソートされます。ソートは元のリスト自体を直接変更する(インプレース動作)ため、戻り値を受け取る必要はありません。
最後に、ソートされた結果がコンソールに出力されます。
補足:lambda式を使ったより簡潔な書き方
独立した関数を定義せずに、lambda式を用いて同じ処理を1行で書くこともできます。
my_list = [["pyt", "is", "fun"], ["python", "fun"], ["py", "4", "good"], ["python"]] # 元のリストを保持したい場合は sorted() を使う sorted_list = sorted(my_list, key=lambda row: sum(len(e) for e in row)) print(sorted_list) # [['python'], ['py', '4', 'good'], ['pyt', 'is', 'fun'], ['python', 'fun']]
sorted()関数を使用すると、元のリストを変更せずに新しいソート済みリストを取得できるため、データを保持しておきたい場合に便利です。用途に応じてsort()とsorted()を使い分けるとよいでしょう。
-
Pythonのascii()関数とは?使い方と実行例をわかりやすく解説
ASCIIは「American Standard Code for Information Interchange(アメリカ標準情報交換コード)」の略称で、文字をコンピュータ上で表現するための文字エンコーディング規格です。たとえば、英字アルファベットの「A」に対応するASCII値は65です。Pythonには、オブジェクトを印字可能な(printable)形式で取得するための組み込み関数 ascii() が用意されています。この関数は引数を1つだけ受け取り、リスト、文字列、タプルなど任意のオブジェクトを指定できます。戻り値は、非ASCII文字が \x、\u、\U のいずれかのエスケープシーケンス
-
Pythonで行列を転置する4つの方法を徹底解説!コード例付き
行列の転置とは? 行列の転置(transpose)とは、行列の列と行を入れ替える操作のことです。転置を行うと、元の行列の列が行になり、行が列になります。 具体例を使って理解しましょう。次のような元の行列「x」があるとします。 x = [[1,2],[3,4],[5,6]] この行列「x」には2つの列があり、1つ目の列には 1, 3, 5、2つ目の列には 2, 4, 6 が含まれています。 この行列を転置すると、列が行に入れ替わります。転置後の行列は次のようになります。 x1 = [[1, 3, 5],[2, 4, 6]] このように、転置後の新しい行列「x1」は、元の行列とは値の配置が異なる形