Python – 回文の数に基づいて行列をソートする方法
Pythonでは、行列(リストのリスト)に含まれる回文の数に基づいてデータを並べ替えることができます。回文とは、「level」や「noon」のように、前から読んでも後ろから読んでも同じになる文字列のことです。
本記事では、各行に含まれる回文の数をカウントし、その数をキーとして行列を昇順にソートする方法を解説します。処理には、リスト内包表記とjoinメソッドを活用した独自の関数を定義し、それをsortメソッドのkey引数に渡すというアプローチを採用します。
サンプルコード
以下は、回文の数に基づいて行列をソートする実装例です。
def get_palindrome_count(row):
return len([element for element in row if ''.join(list(reversed(element))) == element])
my_list = [["abcba", "hdgfue", "abc"], ["peep"],["py", "is", "best"],["sees", "level", "non", "noon"]]
print("The list is :")
print(my_list)
my_list.sort(key=get_palindrome_count)
print("The resultant list is :")
print(my_list)
出力結果
The list is : [['abcba', 'hdgfue', 'abc'], ['peep'], ['py', 'is', 'best'], ['sees', 'level', 'non', 'noon']] The resultant list is : [['py', 'is', 'best'], ['abcba', 'hdgfue', 'abc'], ['peep'], ['sees', 'level', 'non', 'noon']]
コードの解説
回文カウント関数の定義:
get_palindrome_countという名前の関数を定義し、リスト(行)を引数として受け取ります。回文の判定:リスト内包表記を使って各要素を反復処理し、文字列を
reversedで逆順にしてjoinで連結した結果が、元の文字列と一致するかどうかを確認します。カウントの返却:回文に該当する要素だけを集めたリストの長さ(
len)を返します。データの準備:関数の外側で、文字列を要素とするリストのリスト(行列)を定義し、コンソールに表示します。
ソートの実行:
sortメソッドのkey引数に先ほど定義した関数を指定することで、各行の回文の数に基づいてリストが並べ替えられます。結果の表示:ソート後のリストがコンソールに出力されます。
まとめ
出力結果を確認すると、回文を1つも含まない行 ['py', 'is', 'best'] が最初に、回文を4つ含む行 ['sees', 'level', 'non', 'noon'] が最後に配置されています。このように、sortメソッドのkey引数に任意の関数を渡すことで、柔軟な並べ替え条件を簡単に実現できます。
-
【Python】リンクリストが回文かどうかを判定するアルゴリズム
回文リンクリストとはリンクリスト(連結リスト)が与えられたとき、その要素が回文(前から読んでも後ろから読んでも同じ並び)になっているかどうかを判定する問題です。例えば、リストの要素が [1,2,3,2,1] のような場合は回文であるため True を返し、[1,2,3] のような場合は回文ではないため False を返します。アルゴリズムの手順この問題は、fast / slow の2つのポインタを使ってリストの中央を特定し、前半部分を逆順に反転させたうえで後半部分と比較することで、追加メモリなしに O(n) 時間で解くことができます。fast := head、slow := head、rev
-
Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け
Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>