-
Pythonでパターンに一致する部分を太字タグで囲むプログラムの実装方法
テキストと、文字列のリストであるパターンが与えられたとき、テキスト内のパターンに一致するすべての部分文字列を <b> タグと </b> タグで囲む関数「embolden」を定義する問題を考えてみましょう。隣接している、あるいは重なり合っているパターンが存在する場合は、それらを1つのタグにまとめる必要があります。例えば、text = thisissampleline、patterns = [this, ssam, sample] が入力された場合、出力は <b>this</b>i<b>ssample</b>line となりま
-
Pythonでコマンドライン引数を追加する方法:argparseモジュールの使い方を解説
はじめにPythonには、コマンドライン引数を解析するための強力なargparseモジュールが標準で用意されています。OSのコマンドラインからユーザーの入力を受け取りたい場合や、URLを指定して解析させたり、S3バケットへアップロードするファイルを指定したりするなど、パラメータを受け付けるプログラムを作成したい場合に、argparseを使えば最小限の手間で実装できます。基本的な使い方argparseを使ったプログラムの流れは、以下の3ステップです。プログラムが受け付ける引数を定義するパーサーを呼び出して、結果オブジェクトを取得する取得した引数を使用するまとめると、引数パーサーを使ったプログラム
-
Pythonでリストを合計が等しい2つのグループに分割できるか判定する方法
数値のリスト nums が与えられたとき、その要素を2つのグループに分割し、それぞれのグループに含まれる要素の合計が等しくなるようにできるかどうかを判定することを考えます。 例えば、入力が nums = [2, 3, 6, 5] の場合、[2, 6] と [3, 5] という2つのグループに分けることができるため、出力は True になります。 解決のアプローチ この問題は、動的計画法(DP)を用いた「部分和問題」として解くことができます。ポイントは、まず全体の合計を求め、それが偶数であれば「合計の半分に等しい部分和が作れるか」を確認するだけだという点です。具体的には以下の手順で進めます。
-
Pythonでリスト内のすべての値を同じにするために必要な最小操作回数を求めるプログラム
問題の概要 整数のリスト nums が与えられたとき、次の操作を実行できます。「リスト内の最大の数を選び、それを2番目に大きい数へ変換する」というものです。この操作を繰り返して、リスト内のすべての整数を同じ値に揃えるために必要な最小の操作回数を求めてください。 具体例で理解する たとえば、入力が nums = [5, 9, 2] の場合、出力は 3 になります。手順は以下の通りです。 まず最大値の 9 を選び、2番目に大きい 5 に変換 → 配列は [5, 5, 2] になる 次に 5 を選び、2番目に大きい 2 に変換 → [5, 2, 2] になる もう一度残りの 5 を選び、2 に変
-
PythonでExcelスプレッドシートの数式を計算するプログラムの作成方法
2次元の行列がExcelスプレッドシートを表していると仮定します。このとき、すべてのセルと数式を計算し終えた状態の同じ行列を求める必要があります。Excelスプレッドシートは一般的に以下のような構造を持っています。B17035=A1+A2列には「A、B、C…」、行には「1、2、3…」という名前が付けられています。各セルには、値そのもの、別のセルへの参照、あるいは数値やセル参照を使った演算を表すExcel数式のいずれかが格納されます(例:「=A1+5」「=A2+B2」「=2+5」など)。入力と出力の例たとえば、入力が以下のような場合を考えてみましょう。B17035=A1+A2このとき、期待される
-
PythonのopenpyxlでExcelグラフを作成する方法|棒グラフ作成をステップ解説
この記事では、Pythonのopenpyxlモジュールを使ってExcelにグラフを作成する方法を解説します。テニス選手のグランドスラム優勝回数をサンプルデータとして、ゼロからExcelスプレッドシートを作成し、openpyxlで棒グラフを描画するまでの一連の手順を紹介します。 はじめに Microsoft Officeでは、Office 2007以降、より多くの行と列を扱えるようにするため、Excelシートに新しい拡張子「.xlsx」が導入されました。この変更により、ExcelファイルはZIP圧縮されたXMLベースのフォーマットへと移行しています。Microsoftのスプレッドシートは今やビ
-
Pythonで合計がnとなるフィボナッチ数の最小個数を求めるプログラム
問題の概要ある整数 n が与えられたとき、その合計がちょうど n になるようにするために必要なフィボナッチ数の最小個数を求めます。たとえば、入力が n = 20 の場合、出力は 3 になります。これは、フィボナッチ数列に含まれる [2, 5, 13] の3つの数を足し合わせることで 20 を作れるためです。解決のためのアルゴリズムこの問題は「貪欲法(グリーディ法)」を用いることで効率的に解けます。基本的な考え方は、「n 以下の最大のフィボナッチ数を選び、n から引く」という操作を n が 0 になるまで繰り返すというものです。res := 0(使用したフィボナッチ数のカウント用変数)fibo
-
Pythonで文字列のすべての文字を使ってk個の回文を作成できるかどうかを判定する方法
問題概要 文字列 s と整数 k が与えられたとき、s に含まれるすべての文字を使って、ちょうど k 個の回文(前から読んでも後ろから読んでも同じになる文字列)を作成できるかどうかを判定します。 たとえば、入力が s = amledavmel、k = 2 の場合、「level」と「madam」という2つの回文を作成できるため、出力は True になります。 解法の考え方 回文の性質に注目すると、この問題は非常にシンプルに解けます。回文では、奇数回出現できる文字は最大で1種類だけです。したがって、文字列のすべての文字を k 個の回文に振り分けられる条件は、「奇数回出現する文字の種類数が k 以
-
Pythonでフライト記録から正しい順序の空港の旅程を復元するプログラム
フライトのリストが [出発地, 目的地] のペア形式で与えられます。このリストはシャッフルされているため、実際に訪問された空港を正しい順序で復元する必要があります。有効な旅程が複数存在する場合は、辞書順で最小のものを優先して返します。 たとえば、入力が flights = [[Mumbai, Kolkata], [Delhi, Mumbai], [Kolkata, Delhi]] の場合、出力は [Delhi, Mumbai, Kolkata, Delhi] になります。 この問題は、グラフ理論におけるオイラー路(Eulerian Path)、いわゆる「一筆書き経路」を求める問題として捉える
-
正規表現とデータ型を活用してPandas DataFrameの複数列を効率的に選択する方法
DataFrameは、スプレッドシートやデータベースのように行と列で構成されたデータセットと考えることができます。DataFrameは2次元(2D)のオブジェクトです。1次元(Series)と2次元(DataFrame)の違い「1D」と「2D」という用語に混乱していませんか?両者の大きな違いは、特定のデータポイントに到達するために必要な参照情報の数です。Series(1次元)の場合、値を取り出すには行インデックスという1つの参照点だけで十分です。一方、DataFrame(2次元)では、1つの参照点だけでは不十分で、行の値と列の値の交差点を指定する必要があります。CSVファイルからDataFra
-
Pythonパッケージの作成とアクセス方法を徹底解説!初心者向けガイド
この記事では、Pythonにおけるパッケージ(Package)について解説します。パッケージを使うことで、モジュールやコードを階層的に整理し、大規模なプロジェクトでも見通しの良い構成を実現できます。ここでは、パッケージの基本的な作り方から、サブパッケージへのアクセス方法まで、具体例とともにわかりやすく紹介します。 Pythonパッケージとは? パッケージとは、関連する複数のモジュール(.pyファイル)をひとつのディレクトリにまとめたものです。パッケージを利用することで、コードの再利用性が高まり、プロジェクト全体の保守性も向上します。 パッケージの作成方法 Pythonでディレクトリをパッケージ
-
Pythonでウィキペディアのインフォボックスからテキストを取得する方法
この記事では、PythonのBeautifulSoup(bs4)とrequestsライブラリを使って、ウィキペディアのインフォボックス(Infobox)からテキストを取得する方法を解説します。所要時間はわずか10分ほど。手順はシンプルなので、Webスクレイピング初心者の方でも安心して取り組めます。 必要なライブラリのインストール まず、bs4とrequestsをインストールしましょう。以下のコマンドを実行してください。 pip install bs4 pip install requests テキスト取得までの手順 インフォボックスから目的のテキストを取得するコードは、次の流れで作成します。
-
Pythonのpytrieモジュールで文字列のプレフィックス(前方一致)マッチングを行う方法
本記事では、Pythonのpytrieモジュールを使用して、文字列のリストから指定したプレフィックス(前方一致)に合致する文字列を抽出する方法を解説します。まず、具体例を見て理解を深めましょう。 入力: リスト: [tutorialspoint, tutorials, tutorialspython, python] プレフィックス: tutorials 出力: [tutorialspoint, tutorials, tutorialspython] この処理はさまざまな方法で実装できますが、本チュートリアルではpytrieモジュールを使ったアプローチを紹介します。 pytrieモ
-
PythonとSQLiteで学ぶSQLデータベース操作の基本
はじめにこの記事では、PythonとSQLiteデータベースを使ってSQLを操作する方法を解説します。PythonにはSQLiteに接続するための標準モジュール「sqlite3」が組み込まれており、追加のインストールなしですぐにデータベース操作を始められます。SQLiteデータベースへの接続手順PythonからSQLiteデータベースに接続するには、以下の3つのステップに従います。sqlite3モジュールをインポートするsqlite3.connect(db_name)メソッドで接続を作成する。引数にはデータベース名を指定します。指定した名前のファイルが存在しない場合は新しく作成され、すでに存在
-
【Python】2つのリストから同じ要素を含まないペアを作成する方法
この記事では、Pythonを使って2つのリストからペアを作成する方法を解説します。ただし、単純な組み合わせではなく、「同じ値を持つ要素同士はペアにしない」という条件を満たす必要があります。初心者の方にもわかるよう、具体的な手順とサンプルコード付きで説明していきます。 解決の手順 問題を解決するための流れは以下の通りです。 まず、要素を含む2つのリストを用意します。 両方のリストを反復処理し、対応する要素が異なる場合にのみペアをリストへ追加します。 最後に結果を出力します。 方法1:リスト内包表記を使う 最もシンプルなのが、リスト内包表記で条件を指定する方法です。if i != j の条件に
-
Pythonでタプルのリストを辞書に変換する方法を解説
この記事では、Pythonを使ってタプルのリストを辞書に変換する方法を学びます。タプルのリストから辞書への変換は、実はとてもシンプルな操作です。基本的な変換方法に加えて、setdefault()メソッドを使って値をリスト形式で格納する応用テクニックも紹介します。基本的な変換手順以下の手順に従ってコードを作成しましょう。タプルを含むリストを初期化します。dict()関数を使用して、タプルのリストを辞書に変換します。結果の辞書を出力します。サンプルコードそれでは、実際のコードを見てみましょう。# リストの初期化 tuples = [(Key 1, 1), (Key 2, 2), (Key 3, 3
-
Pythonで0と1を交互に並べたリストを初期化する方法
この記事では、Pythonにおいて0と1を交互に含むリストを初期化する方法を解説します。リストの長さが指定されており、その長さに応じて0と1を交互に配置したリストを作成することを目標にします。方法1:forループと条件分岐を使うまずは最も基本的な方法です。以下の手順で実装します。空のリストとリストの長さを初期化する。長さの回数だけ繰り返し処理を行い、インデックスの偶奇に応じて0と1を交互に追加する。結果を出力する。コード例# 空のリストを初期化 result = [] length = 7 # 繰り返し処理 for i in range(length): # インデックスの偶奇を判定
-
Pythonでリスト内の要素の出現頻度(出現回数)を数える方法
この記事では、Pythonでリスト内の各要素が何回出現するか(出現頻度)を調べる方法を解説します。実装のアプローチはいくつかありますが、ここでは代表的な2つの方法を紹介します。 方法1:辞書を使って手動でカウントする まず、辞書を活用してロジックを自前で実装する基本の方法から見ていきましょう。以下の手順でコードを作成します。 要素を含むリストと、空の辞書を用意します。 リストの各要素を順番に処理します。 その要素がすでに辞書に存在するかどうかを確認します。 存在する場合は、対応するカウントを1つ増やします。 存在しない場合は、カウントを1で新しく登録します。 最後に結果の辞書を出力し
-
Pythonでリストの各要素をK回繰り返して拡張する方法
この記事では、Pythonのリストに含まれる各要素をK回複製することで、リストを拡張する方法を解説します。2つの異なるアプローチを紹介しますので、目的やスタイルに合わせて使い分けてください。 方法1:繰り返し演算子とforループを使う まずは、基本的なforループとPythonの繰り返し演算子(*)を組み合わせる方法です。以下の手順で実装できます。 元のリスト、繰り返し回数K、そして結果を格納する空のリストを初期化します。 リストを反復処理し、現在の要素に対して繰り返し演算子を使ってK個のコピーを作成します。 結果のリストを出力します。 コード例 # リストの初期化 numbers =
-
Pythonでリストから交互の要素を抽出する2つの方法
この記事では、Pythonのリストから交互の要素(隔要素)を取得する方法を学びます。問題を解決するための2つの異なるアプローチを、コード例とともにわかりやすく解説します。方法1:リスト内包表記を使うまず、リスト内包表記を使った方法を紹介します。以下の手順で実装できます。リストを初期化する。リストを反復処理し、奇数インデックスにあるすべての要素を格納する。結果を出力する。コード例実際のコードを見てみましょう。# リストを初期化 numbers = [1, 2, 3, 4, 5] # 交互の要素を取得 result = [numbers[i] for i in range(len(numbers