Pythonでリストが回文(パリンドローム)かどうかを判定する方法
Pythonでは、リストが回文(前から読んでも後ろから読んでも同じ並び)であるかどうかを簡単に判定できます。本記事では、文字列を反転させて元の文字列と比較するメソッドを定義し、その結果に応じてコンソールにメッセージを表示する方法を解説します。処理にはリスト内包表記と join メソッドを使用します。
サンプルコード
以下が実際の実装例です。
def check_palindrome_list(my_str):
if my_str == my_str[::-1]:
print("The list is a palindrome")
else:
print("The list isn't a palindrome")
my_list = [77, 1, 56, 65, 1, 77]
print("The list is :")
print(my_list)
my_list = ' '.join([str(elem) for elem in my_list])
check_palindrome_list(my_list)実行結果
The list is : [77, 1, 56, 65, 1, 77] The list is a palindrome
コードの解説
まず、
check_palindrome_listという名前のメソッドを定義します。このメソッドは文字列を引数として受け取ります。スライス記法
[::-1]を使って文字列を反転させ、元の文字列と比較します。比較結果に応じて、「回文である」または「回文ではない」というメッセージをコンソールに表示します。
メソッドの外側で整数のリストを定義し、コンソールに出力して内容を確認できるようにしています。
リスト内包表記で各要素を文字列に変換したうえで、
joinメソッドを使って要素を連結し、ひとつの文字列にまとめます。最後に、変換した文字列を引数としてメソッドを呼び出し、判定結果を出力します。
ポイント
数値のリストをそのまま比較することも可能ですが、この例では一度文字列に変換してから判定を行っています。スライス [::-1] はリストや文字列を手軽に逆順にできる便利な記法なので、回文判定以外にもさまざまな場面で活用できます。また、より簡潔に書きたい場合は、以下のように関数を boolean を返す形にすることもできます。
def is_palindrome(seq): return seq == seq[::-1]
-
Pythonのcmp()関数とは?2つの整数を比較する方法をわかりやすく解説
cmp()関数とはcmp()は、2つの整数を比較するためのPython標準ライブラリの関数です。比較結果は以下の3パターンで返されます。最初の整数が2番目より小さい場合:-1最初の整数が2番目より大きい場合:1両者が等しい場合:0なお、組み込み関数のcmp()はPython 3で廃止されました。そのため本記事では、同じ挙動を再現する独自関数を定義し、その使い方を紹介します。実装は非常にシンプルで、PythonではTrueが1、Falseが0として扱われる性質を利用した「(x > y) - (x < y)」という式で実現できます。サンプルコード次の例では、x>y、x<y、
-
【Python】リンクリストが回文かどうかを判定するアルゴリズム
回文リンクリストとはリンクリスト(連結リスト)が与えられたとき、その要素が回文(前から読んでも後ろから読んでも同じ並び)になっているかどうかを判定する問題です。例えば、リストの要素が [1,2,3,2,1] のような場合は回文であるため True を返し、[1,2,3] のような場合は回文ではないため False を返します。アルゴリズムの手順この問題は、fast / slow の2つのポインタを使ってリストの中央を特定し、前半部分を逆順に反転させたうえで後半部分と比較することで、追加メモリなしに O(n) 時間で解くことができます。fast := head、slow := head、rev