-
【Python】文字列から奇数インデックスの文字を削除するプログラムの書き方
概要文字列から奇数インデックス(1、3、5…番目)の文字を削除したい場合は、文字列を引数として受け取る関数を定義するのが基本です。この記事では、whileループを使った実装方法とその動作を、サンプルコードと実行結果をもとにわかりやすく解説します。サンプルコードdef remove_odd_index_characters(my_str): new_string = "" i = 0 while i < len(my_str):
-
Pythonで文字列内の単語数と文字数をカウントする方法【初心者向け解説】
プログラミングでは、文字列に含まれる単語数や文字数を計算したい場面がよくあります。例えば、文章の文字数制限チェックやテキスト解析などがその代表例です。ここでは、Pythonを使って文字列内の単語数と文字数を求める基本的な方法を紹介します。サンプルコードmy_string = Hi there, how are you Will ? print(The string is :) print(my_string) my_chars=0 my_words=1 for i in my_string: my_chars=my_chars+1 if(i== ): my_w
-
Pythonで二分木の最大値を求める!中順走査(In-order Traversal)を使った実装方法
木構造(ツリー)の中から最大値を求めたい場合には、二分木クラスを作成し、「根要素を設定するメソッド」「再帰を用いて中順走査(インオーダートラバーサル)を行うメソッド」などを定義しておくと便利です。 クラスのインスタンスを生成すれば、これらのメソッドにアクセスして自由に利用できるようになります。 以下に具体的な実装例を示します。 中順走査(In-order Traversal)とは 中順走査とは、二分木を巡回する代表的な手法の一つで、「左の子ノード → 自分自身(親ノード) → 右の子ノード」の順番で各ノードを訪問します。本記事では、この走査の過程で訪れたノードの値を順次比較することで、木全
-
【Python】ポストオーダー(後順走査)で深さ優先探索トラバーサルを実装するプログラム
木構造に対して後順走査(ポストオーダートラバーサル)を用いた深さ優先探索(DFS)を実装するには、要素の追加、特定要素の検索、後順走査の実行といった機能を備えたツリークラスを定義します。クラスのインスタンスを生成すれば、これらのメソッドを自由に呼び出して操作できるようになります。 以下に、具体的な実装例を示します。 後順走査(ポストオーダー)とは 後順走査とは、「すべての子ノードを先に訪問し、その後に自分自身(親ノード)を訪問する」という順序で木をたどる手法です。二分木では「左の子 → 右の子 → 親」の順になりますが、本記事のように子の数が任意である一般木の場合は「すべての子 → 自分自身
-
BFS(幅優先探索)で二分木のミラーコピーを作成して表示するPythonプログラム
木構造のミラーコピー(左右を反転させた複製)を作成し、それを幅優先探索(BFS)で表示したいケースは少なくありません。本記事では、ルート要素の設定、左側の子ノードへの挿入、右側の子ノードへの挿入、特定要素の検索、BFS走査などを行うメソッドを備えた二分木クラスを定義します。クラスのインスタンスを生成すれば、これらのメソッドを自由に呼び出せるようになります。 以下に具体的な実装例を示します。 サンプルコード class BinaryTree_struct: def __init__(self, key=None): self.key = key self
-
組み込み関数を使わずに2つの文字列を比較し、長い方の文字列を表示するPythonプログラム
2つの文字列を受け取り、組み込み関数を使用せずにより長い方の文字列を表示したい場合があります。そのようなときは、単純な反復処理(forループ)と「==」演算子を組み合わせることで実現できます。通常、文字列の長さを取得するにはlen()関数を使いますが、ここではあえて使用せず、文字を1つずつ数える方法で長さを求めます。以下に具体的な実装例を示します。サンプルコードstring_1 = Malala string_2 = Male count_1 = 0 count_2 = 0 print(1つ目の文字列は :) print(string_1) print(2つ目の文字列は :) print(st
-
Pythonで文字列内の小文字の数をカウントする方法【初心者向け】
文字列に含まれる小文字の数を数えたい場合、文字列を1文字ずつ反復処理(イテレート)するのが基本のアプローチです。各文字が小文字かどうかを判定し、小文字であればカウンターを増加させることで、合計数を求めることができます。以下に具体的な実装例を示します。サンプルコードmy_string = Hi there how are you print(The string is :) print(my_string) my_counter = 0 for i in my_string: if(i.islower()): my_counter = my_counter + 1 pri
-
【Python入門】文字列の最初の2文字と最後の2文字を組み合わせて新しい文字列を作る方法
Pythonでは、指定した文字列の先頭2文字と末尾2文字を取り出して、それらをつなげた新しい文字列を簡単に作成できます。この処理には、カウンター変数を定義して文字列の長さを求め、インデックス(添字)を使って特定範囲の要素にアクセスする方法が使えます。以下に具体的な実装例を示します。サンプルコードmy_string = Hi there how are you my_counter = 0 for i in my_string: my_counter = my_counter + 1 new_string = my_string[0:2] + my_string[my_counter
-
【Python】再帰なしで文字列の全順列を辞書式順序に出力する方法
再帰を使わずに、文字列のすべての順列を辞書式順序(辞書順)で出力したい場合は、文字列を引数として受け取る関数を定義します。この関数では、シンプルな「for」ループで文字列の長さの階乗回数だけ反復処理を行い、「while」条件で特定の制約をチェックしながら、次の順列を順次生成していきます。 以下に具体的な実装例を示します。 サンプルコード from math import factorial def lex_permutation(my_string): for i in range(factorial(len(my_string))): print(.join(my_
-
【Python】二分木の左側の部分木(サブツリー)のノードのみを出力するプログラム
二分木(バイナリツリー)の左側の部分木(サブツリー)に含まれるノードだけを出力したい場合、ルートノードの設定、中順走査(in-order traversal)の実行、ルートノードの右側・左側への要素の挿入など、必要な操作をメソッドとして持つクラスを作成するのが効果的です。クラスのインスタンスを生成し、それらのメソッドを呼び出すことで、目的の処理を簡単に実現できます。以下に具体的な実装例を示します。サンプルコードclass BinaryTree_struct: def __init__(self, data=None): self.key = data s
-
【Python】再帰を使って文字列のすべての順列を辞書式順序で出力する方法
文字列のすべての順列を辞書式順序(辞書順)で出力したい場合、再帰を活用したアプローチが有効です。具体的には、要素の並びを「for」ループで反復処理しながら、「join」メソッドを使って各要素を連結し、文字列として出力するメソッドを定義します。 以下に、実際の実装例を示します。 サンプルコード from math import factorial def lexicographic_permutation_order(s): my_sequence = list(s) for _ in range(factorial(len(my_sequence))): pri
-
PythonでBFS(幅優先探索)を使って木構造のノードを表示するプログラム
木構造のノードを幅優先探索(BFS:Breadth First Search)で表示したい場合、専用のクラスを作成し、その中にルートノードの設定、要素の追加、特定要素の検索、BFSトラバーサルの実行といったメソッドを実装します。作成したクラスのインスタンスを生成すれば、これらのメソッドを自由に呼び出して利用できます。本記事では、対話型のメニュー形式で動作するサンプルプログラムを通じて、その実装方法を詳しく解説します。サンプルコードclass Tree_struct: def __init__(self, data=None): self.key = data
-
Pythonで二分木の全ノードの合計を求めるプログラムの実装方法
木構造のすべてのノードの合計を求めたい場合、まずクラスを作成し、その中にルートノードを設定するメソッド、ツリーへ要素を追加するメソッド、特定の要素を検索するメソッド、さらにツリー内の全要素を合計して合計値を返すメソッドなどを定義します。クラスのインスタンスを生成すれば、これらのメソッドにアクセスして自由に利用できます。 本記事では、対話形式のメニューを使ってノードの追加や合計の計算が行えるサンプルプログラムを紹介します。ポイントは sum_node メソッドで、再帰呼び出しを利用して「自分自身のキーの値+すべての子ノードの合計」を順次加算していくことで、木全体の合計をシンプルに求められる点で
-
【Python】BFS(幅優先探索)を使ってグラフ内のノードから到達可能なすべてのノードを検索する方法
グラフ構造において、特定のノードから到達可能なすべてのノードを調べたい場合、幅優先探索(BFS)を利用するのが最も一般的かつ効率的なアプローチです。本記事では、Pythonの標準ライブラリである collections.deque(両端キュー)を使ってBFSを実装し、指定した複数のノードそれぞれから到達できるノードの一覧を出力するプログラムを紹介します。サンプルコードfrom collections import deque def add_edge(v, w): global visited_node, adj adj[v].append(w) adj[w].ap
-
Pythonで無向グラフのすべての連結成分をDFSで検索する方法
無向グラフに含まれるすべての連結成分(Connected Components)を検索するには、グラフを扱うクラスを作成し、頂点の初期化、辺の追加、深さ優先探索(DFS)による連結成分の検出といったメソッドを定義します。クラスのインスタンスを生成することで、これらのメソッドにアクセスして自由に利用できます。 以下に具体的な実装例を示します。 サンプルコード class Graph_structure: def __init__(self, V): self.V = V self.adj = [[] for i in range(V)] def
-
BFS(幅優先探索)で無向グラフのサイクルを検出するPythonプログラム
グラフ理論における「サイクル(閉路)の検出」は、依存関係のチェックやネットワーク解析など、さまざまな場面で活用される基本的な問題です。この記事では、幅優先探索(BFS:Breadth-First Search)を使って、無向グラフにサイクルが含まれているかどうかを判定するPythonプログラムを紹介します。 サイクル検出の基本的な考え方 BFSでグラフを探索する際、各頂点を「訪問済み」としてマークしていきます。探索中に、ある頂点の隣接頂点がすでに訪問済みであり、かつその頂点が現在の頂点の親(直前にいた頂点)ではない場合、別の経路から同じ頂点へ戻ってきたことになるため、サイクルが存在すると判断
-
Kadaneのアルゴリズムで最大部分配列問題を解くPythonプログラム
Kadane(カデイン)のアルゴリズムを使って最大部分配列(Maximum Subarray)を求めたい場合、部分配列の最大値を見つけるための専用メソッドを定義します。そして、イテレーション(繰り返し処理)を通じて最大部分配列を追跡していきます。以下に具体的な実装例を示します。サンプルコードdef find_max_sub_array(my_list, beg, end): max_end_at_i = max_seen_till_now = my_list[beg] max_left_at_i = max_left_till_now = beg max_right_t
-
Pythonで空でない文字列から指定したインデックスの文字を削除する方法
空でない文字列から特定のインデックス位置にある文字を削除したい場合、文字列を先頭から順に反復処理し、削除対象のインデックスと一致しない文字だけを別の新しい文字列に格納していくという方法が使えます。以下に具体的な実装例を示します。サンプルコードmy_string = Hi there how are you print(元の文字列:) print(my_string) index_removed = 2 changed_string = for char in range(0, len(my_string)): if(char != index_removed):
-
【Python入門】文字列の最初と最後の文字を入れ替えるプログラムの書き方
文字列の最初と最後の文字を入れ替えた新しい文字列を作成したい場合、インデックス操作(スライシング)を活用した関数を定義することで、シンプルかつ効率的に実現できます。以下に具体的な実装例を示します。サンプルコードdef exchange_val(my_string): return my_string[-1:] + my_string[1:-1] + my_string[:1] my_string = Hi there how are you print(The string is :) print(my_string) print(The modified stri
-
Pythonでライブラリ関数を使わずに文字列の長さを計算するプログラム
Pythonでは、len()のような組み込み関数やライブラリメソッドに頼らなくても、文字列の長さを計算できます。基本的な考え方はシンプルで、「カウンタ変数」を用意し、文字列内の各要素(文字)に出会うたびにカウントを1ずつ増やしていくというものです。 以下に具体的な実装例を示します。 サンプルコード my_string = Hi Will print(The string is :) print(my_string) my_counter = 0 for i in my_string: my_counter = my_counter + 1 print(The length of t