Python
 Computer >> コンピューター >  >> プログラミング >> Python

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引数に任意の関数を渡すことで、柔軟な並べ替え条件を簡単に実現できます。

  1. 【Python】リンクリストが回文かどうかを判定するアルゴリズム

    回文リンクリストとはリンクリスト(連結リスト)が与えられたとき、その要素が回文(前から読んでも後ろから読んでも同じ並び)になっているかどうかを判定する問題です。例えば、リストの要素が [1,2,3,2,1] のような場合は回文であるため True を返し、[1,2,3] のような場合は回文ではないため False を返します。アルゴリズムの手順この問題は、fast / slow の2つのポインタを使ってリストの中央を特定し、前半部分を逆順に反転させたうえで後半部分と比較することで、追加メモリなしに O(n) 時間で解くことができます。fast := head、slow := head、rev

  2. Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け

    Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>