はじめに
この実験では、Python でリストが回文(パリンドローム)かどうかを判断する方法を学びます。回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになるシーケンスのことです。この実験では、リストの回文を識別する Python スクリプトを作成する手順を案内します。
2 つの方法を探索します。1 つはスライシングを使用してリストをその逆順バージョンと比較する方法、もう 1 つは明示的にリストを逆順にして比較する方法です。この実験では、コード例と、スクリプトを実行して出力を解釈する方法に関する指示が提供され、与えられたリストが回文かどうかを示します。
リストの回文(パリンドローム)を理解する
このステップでは、リストの回文(パリンドローム)について学び、Python でそれを識別する方法を学びます。回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになるシーケンスのことです。たとえば、「madam」という単語は回文(パリンドローム)です。リストの文脈では、リストの回文(パリンドローム)とは、先頭から末尾まで、または末尾から先頭まで読んでも要素が同じであるリストのことです。
まずは、リストの回文(パリンドローム)を探索する Python スクリプトを作成しましょう。
VS Code エディタを開きます。
~/projectディレクトリにpalindrome.pyという名前の新しいファイルを作成します。touch ~/project/palindrome.pyエディタで
palindrome.pyファイルを開きます。
では、palindrome.py ファイルにいくつかのコードを追加して、リストが回文(パリンドローム)かどうかをチェックする方法を理解しましょう。
def is_palindrome(lst):
return lst == lst[::-1]
## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]
## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")
このコードでは、以下のことを行っています。
- リスト
lstを入力とするis_palindrome(lst)関数を定義しています。 - 関数内では、スライシング
lst[::-1]を使用してリストをその逆順バージョンと比較しています。 - リストが回文(パリンドローム)である場合は
Trueを返し、そうでない場合はFalseを返します。 - 回文(パリンドローム)である
list1と、回文(パリンドローム)でないlist2という 2 つのサンプルリストを作成しています。 print()関数を使用して、各リストが回文(パリンドローム)かどうかを表示しています。
スクリプトを実行するには、ターミナルで以下のコマンドを実行します。
python ~/project/palindrome.py
以下の出力が表示されるはずです。
[1, 2, 3, 2, 1] is a palindrome: True
[1, 2, 3, 4, 5] is a palindrome: False
この出力から、list1 が回文(パリンドローム)であり、list2 が回文(パリンドローム)でないことが確認できます。
逆順のリストと比較する
このステップでは、リストを明示的に逆順にして元のリストと比較することで、リストが回文(パリンドローム)かどうかをチェックする別の方法を探索します。このアプローチにより、回文(パリンドローム)チェックについてより詳細に理解できます。
前のステップで作成した palindrome.py ファイルを変更しましょう。
VS Code エディタで
palindrome.pyファイルを開きます。palindrome.pyファイルの内容を以下のように変更します。
def is_palindrome(lst):
reversed_lst = lst[::-1]
return lst == reversed_lst
## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]
## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")
この変更後のコードでは、以下のことを行っています。
is_palindrome(lst)関数内で、スライシングlst[::-1]を使用して入力リストlstの逆順コピーを作成し、reversed_lst変数に格納しています。- 次に、等価演算子
==を使用して元のリストlstと逆順リストreversed_lstを比較しています。 - 元のリストが逆順リストと等しい場合(つまり、回文(パリンドローム)である場合)は
Trueを返し、そうでない場合はFalseを返します。
スクリプトを実行するには、ターミナルで以下のコマンドを実行します。
python ~/project/palindrome.py
前のステップと同じ出力が表示されるはずです。
[1, 2, 3, 2, 1] is a palindrome: True
[1, 2, 3, 4, 5] is a palindrome: False
この出力から、明示的な逆順化方法を使用して、list1 が回文(パリンドローム)であり、list2 が回文(パリンドローム)でないことが確認できます。このアプローチにより、ロジックがより明示的になり、理解しやすくなります。
スライシングを使った逆順化
このステップでは、Python でスライシングを使ってリストを逆順にする方法に焦点を当てます。スライシングは、リストの一部を抽出することができる強力な機能で、リストの逆順コピーを作成するためにも使用できます。
palindrome.py ファイルを再度見て、スライシング技術をもっと詳しく調べましょう。
VS Code エディタで
palindrome.pyファイルを開きます。palindrome.pyファイルの内容が以下のようになっていることを確認します。
def is_palindrome(lst):
reversed_lst = lst[::-1]
return lst == reversed_lst
## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]
## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")
このコードの重要な部分は lst[::-1] です。これはリストの逆順コピーを作成するスライシング操作です。分解して説明しましょう。
lst[:]はリスト全体のコピーを作成します。lst[start:end]はインデックスstartからend - 1までのスライスを作成します。lst[start:end:step]ではstepを指定できます。stepが-1の場合、リストを逆方向に反復処理します。startとendを省略し、stepを-1にする(つまりlst[::-1])ことで、リスト全体の逆順コピーを作成できます。
これをさらに説明するために、スライシングの効果を確認するための print 文を追加しましょう。
def is_palindrome(lst):
reversed_lst = lst[::-1]
print(f"Original list: {lst}")
print(f"Reversed list: {reversed_lst}")
return lst == reversed_lst
## Example lists
list1 = [1, 2, 3, 2, 1]
list2 = [1, 2, 3, 4, 5]
## Check if the lists are palindromes
print(f"{list1} is a palindrome: {is_palindrome(list1)}")
print(f"{list2} is a palindrome: {is_palindrome(list2)}")
では、再度スクリプトを実行しましょう。
python ~/project/palindrome.py
回文(パリンドローム)チェックの結果の前に、元のリストと逆順リストが表示されます。
Original list: [1, 2, 3, 2, 1]
Reversed list: [1, 2, 3, 2, 1]
[1, 2, 3, 2, 1] is a palindrome: True
Original list: [1, 2, 3, 4, 5]
Reversed list: [5, 4, 3, 2, 1]
[1, 2, 3, 4, 5] is a palindrome: False
これは、[::-1] を使ったスライシングが効果的にリストを逆順にすることを示しており、これを使って元のリストが回文(パリンドローム)かどうかを判断できます。
まとめ
この実験では、Python でリストの回文(パリンドローム)を識別する方法を学びました。回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになるリストのことです。palindrome.py スクリプトを作成し、その中に is_palindrome(lst) 関数を含めました。この関数はスライシング (lst[::-1]) を使用してリストを効率的に逆順にし、元のリストと比較します。回文(パリンドローム)であれば True を返し、そうでなければ False を返します。
このスクリプトは、2 つのサンプルリスト list1(回文(パリンドローム))と list2(回文(パリンドローム)ではない)を使ってテストされ、出力結果からこの関数が回文(パリンドローム)を正しく識別できることが確認されました。また、この実験では、比較のためにリストを明示的に逆順にするという概念も紹介されましたが、提供された内容は途中で切れています。



