-
Pythonで重複文字を含まない最長部分文字列を求めるアルゴリズム
文字列が与えられたとき、同じ文字が繰り返されない最長の部分文字列(連続した部分)の長さを求める問題です。例えば、文字列が「ABCABCBB」である場合、答えは 3 になります。これは、重複する文字を一切含まない部分文字列として「ABC」(長さ3)が存在するためです。解法のアプローチこの問題は、スライディングウィンドウ(尺取り法)とハッシュマップを組み合わせることで効率的に解くことができます。各文字が最後に出現した位置を記録しながら、ウィンドウの左端を適切に移動させるのがポイントです。アルゴリズムの手順i := 0、j := 0 と初期化し、文字の出現位置を記録するためのマップ(辞書)を用意しま
-
Pythonの例外処理とは?try・except・finallyの基本をわかりやすく解説
例外(Exception)とは、プログラムの実行中に発生し、命令の通常の流れを妨げるイベントのことです。一般的に、Pythonスクリプトが対処できない状況に遭遇すると、例外を発生(raise)させます。例外は、エラーを表すPythonオブジェクトです。Pythonスクリプトが例外を発生させた場合、その場で例外を処理する必要があります。適切に処理しなければ、スクリプトは終了してしまいます。例外の処理方法例外を発生させる可能性のある怪しいコードがある場合は、そのコードを try: ブロックの中に置くことで、プログラムを防御できます。tryブロックの後には except: 文を続け、さらにその後に、
-
Pythonのtry-finally文とは?使い方と例外発生時の動作を解説
Pythonでは、finallyブロックをtryブロックと組み合わせて使用できます。finallyブロックは、tryブロック内で例外が発生したかどうかにかかわらず、必ず実行したいコードを記述するための場所です。ファイルのクローズやリソースの解放など、後処理を確実に行いたい場合に非常に役立ちます。 try-finally文の構文 try: # ここに通常の処理を記述します ...................... # 例外が発生した場合、以降の処理はスキップされます finally: # このブロックは必ず実行されます ...............
-
Pythonで最長の回文部分文字列を求める方法|動的計画法による解法を徹底解説
文字列 S が与えられたとき、その中に含まれる最長の回文部分文字列を求める問題を考えてみましょう。ここでは文字列 S の長さは最大 1000 であると仮定します。たとえば、文字列が「BABAC」であれば、最長の回文部分文字列は「BAB」となります。 回文とは、前から読んでも後ろから読んでも同じになる文字列のことです。この問題は動的計画法(DP)を用いることで効率的に解くことができます。 動的計画法による解法の手順 この問題を解くために、以下の手順に従います。 文字列の長さと同じサイズの正方行列(2次元配列)を定義し、すべて False で初期化する 主対角成分を True に設定する。
-
Pythonの例外処理:except節で例外の引数を受け取る方法
例外の引数とはPythonの例外には「引数(argument)」を持たせることができます。引数とは、発生した問題に関する追加情報を提供する値のことで、その中身は例外の種類によって異なります。例外の引数を受け取るには、except節に変数を指定します。try: ここで通常の処理を行う ...................... except ExceptionType as Argument: ここでArgumentの値を出力できる単一の例外と複数の例外の場合単一の例外だけを処理する場合は、except文で例外名の後に変数を続けて記述できます。一方、複数の例外をまとめて
-
Pythonで例外を発生させる方法|raise文の基本構文と使い方を解説
Pythonでは、raise文を使用することで、プログラム内の任意の場所で例外を意図的に発生させることができます。例外処理は、エラー発生時にプログラムの異常終了を防ぎ、適切に対処するための重要な仕組みです。ここでは、raise文の基本構文と具体的な使い方を解説します。 raise文の基本構文 raise文の一般的な構文は以下の通りです。 raise [Exception [, args [, traceback]]] Exceptionは発生させる例外の種類(例:NameError)を表し、argsは例外に渡す引数の値です。この引数は省略可能で、指定しなかった場合、例外の引数はNone
-
Pythonで独自の例外を定義する方法|ユーザー定義例外の作成と使い方
Pythonでは、標準の組み込み例外クラスを継承(派生)することで、自分だけのオリジナルな例外クラスを作成できます。これにより、エラーの内容に応じたより具体的で分かりやすい情報を扱えるようになります。 ユーザー定義例外の基本 ここでは、RuntimeError を基底クラスとした例を紹介します。RuntimeError を継承した新しいクラスを作成することで、例外を捕捉した際に、より詳細な情報を表示できるようになります。この手法は、アプリケーション固有のエラー状況を明確に伝えたい場合に非常に役立ちます。 まず、以下のように Networkerror クラスを定義します。 class Netwo
-
Pythonのオブジェクト指向プログラミング(OOP)基本用語をわかりやすく解説
Pythonでオブジェクト指向プログラミング(OOP)を学ぶ際、最初につまずきやすいのが専門用語です。この記事では、PythonにおけるOOPの重要な基本用語を一つずつ丁寧に解説します。各用語の意味を正しく理解することで、クラス設計やコードの読み書きが格段にスムーズになります。 Python OOPの主要用語一覧 クラス(Class) − オブジェクトのためのユーザー定義の設計図(プロトタイプ)。クラスに属するあらゆるオブジェクトを特徴づける属性の集合を定義します。属性にはデータメンバー(クラス変数とインスタンス変数)とメソッドが含まれ、ドット記法(例:obj.attribute)を使ってア
-
Pythonでクラスを作成する方法を基礎から解説
Pythonでは class 文を使って新しいクラスを定義します。クラス名はキーワード class の直後に記述し、その後にコロン(:)を付けます。class ClassName: 任意のクラスドキュメント文字列 class_suiteクラスにはドキュメント文字列を持たせることができ、ClassName.__doc__ で参照できます。class_suite には、クラスのメンバー、データ属性、関数などを定義するすべてのステートメントが含まれます。サンプルコード以下は、シンプルなPythonクラスの例です。class Employee: 全従業員に共通する基底クラス
-
Pythonでクラスのインスタンス(オブジェクト)を作成する方法を徹底解説
Pythonでクラスのインスタンス(オブジェクト)を作成するには、クラス名を関数のように呼び出し、__init__メソッドが受け付ける引数を渡します。この記事では、インスタンスの作成方法から、属性へのアクセス、属性の追加・変更・削除、そして組み込み関数を使った操作方法まで、サンプルコードとともにわかりやすく解説します。 インスタンスの作成方法 クラスのインスタンスを生成するには、クラス名を呼び出して、そのクラスの__init__メソッドが必要とする引数を渡します。 # Employeeクラスの最初のオブジェクトを作成 emp1 = Employee(Zara, 2000) # Emplo
-
Pythonの組み込みクラス属性とは?__dict__・__doc__・__name__などの使い方を実例付きで解説
Pythonの組み込みクラス属性とは Pythonでは、すべてのクラスが標準でいくつかの組み込み属性(built-in attributes)を持っています。これらは通常の属性と同じように、ドット演算子(.)を使ってアクセスできます。 主な組み込みクラス属性は以下の通りです。 __dict__ … クラスの名前空間(namespace)を格納した辞書。 __doc__ … クラスのドキュメンテーション文字列(docstring)。定義されていない場合は None。 __name__ … クラス名。 __module__ … クラスが定義されているモジュール名。対話モードでは __main__
-
Pythonのガベージコレクション徹底解説!オブジェクトの破棄と参照カウントの仕組み
Pythonにおけるオブジェクトの破棄とガベージコレクション Pythonでは、不要になったオブジェクト(組み込み型やクラスのインスタンス)を自動的に削除し、メモリ領域を解放します。このように、Pythonが定期的に使用されなくなったメモリブロックを回収する仕組みのことを「ガベージコレクション(Garbage Collection)」と呼びます。 Pythonのガベージコレクタはプログラムの実行中に動作しており、オブジェクトの参照カウントがゼロになったタイミングで起動されます。参照カウントは、そのオブジェクトを指す別名(エイリアス)の数に応じて変化します。 参照カウントが増えるのは、オブジェク
-
Pythonのクラス継承とは?基本構文から多重継承・isinstanceまで徹底解説
Pythonでは、ゼロからクラスを作り上げる必要はありません。既存のクラスを基にして新しいクラスを派生させることができます。その方法は非常にシンプルで、新しいクラス名の後ろに括弧を付けて親クラスを指定するだけです。このようにして作られた子クラス(派生クラス)は、親クラス(基底クラス)が持つ属性をすべて引き継ぎます。継承された属性は、子クラス自身で定義したものとまったく同じように扱えます。さらに、子クラス側で親クラスのデータメンバーやメソッドを上書き(オーバーライド)することも可能です。継承の基本構文派生クラスの宣言方法は親クラスとほぼ同じですが、クラス名の後ろに継承元となる基底クラスのリストを
-
Pythonにおけるメソッドのオーバーライドとは?基本と実例をわかりやすく解説
Pythonでは、親クラス(スーパークラス)で定義されたメソッドを、子クラス(サブクラス)側で自由に上書きすることができます。この仕組みを「メソッドのオーバーライド」と呼びます。オーバーライドを行う主な理由は、サブクラスにおいて親クラスとは異なる特別な処理や振る舞いを持たせたい場合です。継承した機能をそのまま使うのではなく、自分のクラスに合わせてカスタマイズできるのが大きなメリットです。メソッドのオーバーライドの例以下は、親クラスのメソッドを子クラスで上書きする基本的なサンプルコードです。#!/usr/bin/python3 class Parent: # 親クラスを定義 def
-
Pythonの基本オーバーロードメソッド(特殊メソッド)一覧と使い方
Pythonの基本オーバーロードメソッドとはPythonでは、クラス内に特定の名前を持つメソッドを定義(オーバーライド)することで、オブジェクトの生成・破棄、文字列への変換、オブジェクト同士の比較など、汎用的な動作を自由にカスタマイズできます。こうしたメソッドは「特殊メソッド」あるいは「マジックメソッド」と呼ばれ、名前が二重のアンダースコア(__)で囲まれているのが特徴です。以下の表に、独自のクラスでオーバーライドできる代表的な汎用メソッドをまとめました。オーバーライド可能な主な特殊メソッド一覧番号メソッド・説明・呼び出し例1__init__ ( self [,args...] )コンストラク
-
Pythonの演算子オーバーロード入門|__add__メソッドでベクトル加算を実装する方法
演算子のオーバーロードとは?演算子のオーバーロード(operator overloading)とは、+ や - といった組み込み演算子に対して、自作クラス独自の動作を定義できるPythonの仕組みです。特殊メソッド(マジックメソッド)をクラス内に実装することで、オブジェクト同士の演算を直感的な構文で記述できるようになります。例えば、2次元ベクトルを表す Vector クラスを作成したとしましょう。この状態でプラス演算子(+)を使って2つのベクトルを加算すると、どうなるでしょうか?そのままでは、Pythonはエラーを返す可能性が高いです。しかし、クラス内で __add__ メソッドを定義してベク
-
Pythonでデータを隠す方法:プライベート属性とネームマングリングの基本
オブジェクトの属性(アトリビュート)は、クラス定義の外部から見える場合と見えない場合があります。Pythonでは、属性名の先頭にアンダースコア2つ(__)を付けることで、その属性をクラス外から直接参照できないようにできます。これがPythonにおける「データ隠蔽(カプセル化)」の基本的な手法です。 サンプルコード #!/usr/bin/python class JustCounter: __secretCount = 0 def count(self): self.__secretCount += 1 print(self.__secretCo
-
Pythonのre.match関数とは?正規表現で文字列をマッチングする方法を解説
re.match() 関数は、指定した文字列の先頭に対して正規表現パターンが一致するかどうかを調べるための関数です。必要に応じてフラグ(flags)を組み合わせて、マッチングの挙動を細かく制御することもできます。 構文 re.match() 関数の基本的な構文は以下のとおりです。 re.match(pattern, string, flags=0) パラメータの説明 No.パラメータと説明 1patternマッチさせたい正規表現パターンを指定します。 2string検索対象となる文字列です。文字列の先頭からパターンとの一致が試みられます。 3flagsビット単位のOR演算子(|)を
-
Pythonのre.search()関数の使い方を徹底解説
re.search()関数とはPythonのre.search()関数は、正規表現(RE)パターンが文字列内で最初に出現する位置を検索するための関数です。オプションとしてフラグを指定することもできます。似た関数であるre.match()が文字列の先頭からのみマッチを試みるのに対し、re.search()は文字列全体を走査して、どこかにパターンに一致する部分があればそれを見つけ出せるという点が大きな違いです。構文この関数の基本的な構文は以下の通りです。re.search(pattern, string, flags=0)パラメータの説明No.パラメータと説明1patternマッチさせたい正規表現
-
Pythonの正規表現入門:matchとsearchの違いをわかりやすく解説
Pythonには、正規表現(regular expression)に基づく2つの基本的な操作が用意されています。 match:文字列の先頭でのみ、パターンとの一致をチェックします。 search:文字列内の任意の位置でパターンとの一致を探します(Perlがデフォルトで行う動作はこちらです)。 サンプルコード 以下は、re.match()とre.search()の動作の違いを確認できるPython 3のコード例です。 #!/usr/bin/python3 import re line = Cats are smarter than dogs # 文字列の先頭のみをチェック matchOb