Python

 Computer >> コンピューター >  >> プログラミング >> Python
  1. Pythonでタプルのリストをフラットなリストに変換する方法

    Pythonを扱っていると、リストの要素がタプルになっているデータに出会うことがあります。しかし、その後のデータ処理を行いやすくするためには、タプルを展開して通常のリスト要素へ変換したいケースが多くあります。本記事では、タプルのリストをフラットなリストに変換する代表的な3つの方法を、サンプルコードとともにわかりやすく解説します。方法1: リスト内包表記を使う最もシンプルでPythonらしいのがリスト内包表記です。ネストしたforループを使って、各タプルの中身を1つずつ取り出し、新しいリストとして生成します。タプルごとの要素数が異なっていても問題なく処理できるのが特徴です。サンプルコードlist

  2. Pythonでタプルのリストをリストのリストに変換する方法

    Pythonでは、要素がタプルになっているリストを扱うことがあります。その後のデータ処理において、タプルのままでは扱いにくいケースも多く、リスト形式に変換してから処理を行いたい場面が出てきます。この記事では、タプルのリストをリストのリスト(ネストされたリスト)に変換する代表的な2つの方法を、具体的なコード例とともに解説します。方法1:リスト内包表記を使う最もシンプルで直感的なのが、リスト内包表記を使う方法です。forループで各要素(タプル)を1つずつ取り出し、list()関数を適用することで、新しいリストを作成していきます。コード例listA = [(Mon, 3), (Wed, 4), (F

  3. Pythonでタプルのリストを文字列のリストに変換する方法

    Pythonでデータ処理を行っていると、要素がタプルになっているリストを扱う場面に遭遇することがあります。さらに、そのタプルを文字列へ変換し、文字列のリストとして取得したいケースも少なくありません。本記事では、タプルのリストを文字列のリストに変換する2つの代表的な方法を、具体的なコード例とともに解説します。方法1:join()とリスト内包表記を使う文字列のjoin()メソッドは、シーケンス(ここではタプル)の各要素を指定した区切り文字で連結し、1つの文字列として返します。区切り文字に空文字列を指定すれば、タプル内の要素をそのまま連結できます。リスト内包表記を使えば、リスト内のすべてのタプルに対

  4. 【Python】数値を各桁のリストに変換する方法を解説

    Pythonでデータ処理を行っていると、ある数値を「各桁の数字が要素となったリスト」に変換したい場面に出会うことがあります。例えば、1342という数値を [1, 3, 4, 2] のようなリストにするケースです。この記事では、その実現方法として代表的な2つのアプローチをサンプルコード付きで紹介します。 方法1:リスト内包表記を使う まずstr関数で数値を文字列に変換し、その各文字に対してint関数を適用して整数に戻します。最後に、その結果をリストとしてまとめます。コードが簡潔で読みやすいため、最もよく使われる書き方です。 サンプルコード numA = 1342 # 対象の数値 print(

  5. Pythonでセット(set)をリスト(list)に変換する2つの方法

    Pythonでデータ分析を行う際、データコンテナをセット(set)からリスト(list)へ変換する必要が生じることがあります。セットは重複のない要素の集合を扱うのに便利ですが、インデックスによるアクセスや順序付きの処理を行いたい場合にはリストへの変換が有効です。本記事では、この変換を実現する代表的な2つの方法を解説します。list()関数を使う方法最もシンプルで直感的なのが、組み込み関数 list() をセットに直接適用する方法です。セットの各要素がそのままリストの要素へと変換されます。コード例setA = {Mon, day, 7pm} # 元となるセット print(Given set :

  6. 【Python入門】文字列形式の辞書を辞書オブジェクトに変換する2つの方法

    この記事では、文字列として表現された辞書を、キーと値のペアを持つ通常のPython辞書オブジェクトに変換する方法を解説します。主な方法としてjson.loads()とast.literal_eval()の2つを紹介します。 方法1:json.loads() を使う jsonモジュールのloads()関数は、JSON形式の文字列を解析し、データ構造を保持したままPythonオブジェクトへ変換します。文字列化された辞書を引数として渡すだけで、通常の辞書として結果を取得できます。 サンプルコード import json stringA = {Mon : 3, Wed : 5, Fri : 7} #

  7. Pythonで正規表現マッチングを実装する方法(動的計画法による解説)

    入力文字列 s とパターン文字列 p が与えられているとします。ここで s はマッチング対象となるメインの文字列、p はパターンです。この2つの文字列に対して、パターンが文字列と一致するかどうかを判定するメソッドを定義する必要があります。つまり、「.」と「*」の2つの特殊文字をサポートする正規表現エンジンを実装することになります。特殊文字のルールドット「.」:任意の1文字にマッチします。アスタリスク「*」:直前の要素の0回以上の繰り返しにマッチします。例えば、入力が s = aa、p = a. の場合、ドットが任意の1文字にマッチするため結果は True になります。同じ入力文字列 s = a

  8. 【Python】ヒープを使ってk個のソート済みリストを効率的にマージする方法

    複数のソート済みリストが与えられたとき、それらをすべてマージして1つのソート済みリストを作ることを考えます。この問題は、ヒープ(優先度付きキュー)というデータ構造を使うことで効率的に解くことができます。 たとえば、リストが [1,4,5]、[1,3,4]、[2,6] の3つある場合、マージ後の最終的なリストは [1,1,2,3,4,4,5,6] になります。 アルゴリズムの手順 以下の手順に従って問題を解きます。 まず、空の最小ヒープを1つ作成します。 lists 内の各連結リスト l に対して以下を繰り返します。 l が空(None)でない場合は、その先頭ノードをヒープに挿入します。

  9. Pythonで解く「最長の有効な括弧」問題:スタックを使った効率的なアプローチ

    問題概要開き括弧と閉じ括弧で構成された文字列が与えられたとき、その中に含まれる最も長い「有効な(整形式の)」括弧列の長さを求める問題です。例えば、入力が ”))(())()) の場合、有効な部分文字列は “(())() となるため、答えは 6 になります。アルゴリズム:スタックを利用した解法この問題は、スタックを使うことで線形時間で効率的に解くことができます。手順は以下の通りです。スタックを作成し、初期値として -1 を挿入します。また、答えを格納する変数 ans を 0 で初期化します。i を 0 から文字列の長さ - 1 まで順に処理します。s[i] が開き括弧 (

  10. Pythonで配列内の最初に欠けている正の整数を求めるアルゴリズム

    問題の概要ソートされていない整数型配列が1つ与えられたとき、その中に存在しない最小の正の整数を見つけることを考えます。例えば、配列が [4, -3, 1, -1] の場合、1は存在しますが2が存在しないため、答えは 2 となります。この問題は、配列を「インデックスと値を対応させる」ことで O(n) の時間計算量で解くことができます。以下の手順に従って解いていきましょう。解法のアプローチ変数 i を 0 に初期化し、配列 nums の先頭に 0 を挿入して更新します(インデックスと値を一致させるため)。i を 0 から nums の長さまでループさせます。条件「nums[i] >= 0 か

  11. Pythonで雨水をトラップするアルゴリズムを解説【スタックを使った実装】

    問題の概要n個の非負整数からなる配列を考えます。この配列は、各バーの幅が1である「標高マップ」を表しており、雨が降ったあとにこの地形へ最大でどれだけの水を溜められるかを計算するのが目的です。いわゆる「Trapping Rain Water(雨水をトラップする)」として知られる有名なアルゴリズム問題です。イメージは以下のようになります。上の図では水たまり(青い部分)が6マスあるため、答えは6になります。スタックを使った解法の考え方この問題はスタックを利用すると効率的に解けます。各位置のインデックスをスタックで管理し、現在のバーがスタックの頂点にあるバーより高い場合には、その間に水が溜まっている可

  12. Pythonでのワイルドカードマッチング:動的計画法を使った実装方法

    入力文字列 s と、もう一つの入力文字列 p があるとします。s が対象となる文字列で、p はパターンです。この記事では、文字列がパターンに一致するかどうかを判定するメソッドを Python で実装します。具体的には、「?」や「*」といったワイルドカード文字をサポートする正規表現マッチングを実装していきます。 ワイルドカードのルール 「?」(クエスチョンマーク):任意の1文字に一致します。 「*」(アスタリスク):0個以上の任意の文字列に一致します。 例えば、s = aa、p = a? という入力の場合、結果は True になります。同じ入力文字列に対して、パターンが ?* の場合も

  13. Pythonで解く「ジャンプゲーム II」:最小ジャンプ回数を求める貪欲法アルゴリズム

    問題概要 すべての要素が正の整数である配列が与えられます。初期位置はインデックス0で、配列の各要素はその位置からジャンプできる最大距離を表します。目標は、最後のインデックスに到達するために必要なジャンプ回数を最小化することです。 例えば、配列が [2,3,1,1,4] の場合、答えは 2 になります。インデックス0からインデックス1へジャンプし、そこからインデックス4(最後のインデックス)へ一気にジャンプできるためです。 解法のアプローチ(貪欲法) この問題は、貪欲法(Greedy法)を使うことで線形時間で効率的に解けます。ポイントは、「現在のジャンプ1回で届く範囲の境界」と「次に到達可能な

  14. 【Python】文字列が有効な数値かどうかを判定する方法

    プログラミングでは、ある文字列が数値として有効かどうかを判定したい場面がよくあります。たとえば、「0.2」「abc」「hello」「-2.5」「10」という文字列が与えられた場合、判定結果はそれぞれ true、false、false、true、true となります。この記事では、Pythonを使って文字列が有効な数値を表しているかどうかをチェックする方法を解説します。解決のアプローチこの問題を解くには、Pythonの文字列パース(型変換)の仕組みを利用します。具体的には、次の手順で判定を行います。文字列を float() 関数で数値に変換してみます。変換が成功して例外が発生しなければ、その文字

  15. Pythonで解くヒストグラム内の最大長方形|スタックによる効率的な解法

    問題の概要 ヒストグラムの各棒の高さを表す整数配列が与えられたとします。各棒の幅はすべて1です。このとき、ヒストグラムの中に含まれる長方形のうち、面積が最大となるものを見つけるのがこの問題です。 解法のアプローチ:スタックを活用する この問題はスタックを使うことで効率的に解けます。各棒について「その棒の高さを上限とした長方形」が左右にどこまで広げられるかを、インデックスをスタックで管理しながら求めていくのがポイントです。 アルゴリズムの手順 空のスタックを作成し、i := 0、ans := 0 で初期化します。 i が heights のサイズ未満である間、以下を繰り返します。 スタック

  16. Pythonで解く「株式売買のベストタイミング III」― 最大2回の取引で最大利益を求める方法

    ある配列が与えられ、その i 番目の要素が i 日目の株価を表しているとします。このとき、最大2回までの取引で得られる最大の利益を求めるアルゴリズムを設計するのが、この問題の目的です。 例として、株価が [3,3,5,0,1,3,1,4] の場合を考えてみましょう。4日目に価格 0 で株を買い、6日目に価格 3 で売れば利益は 3 − 0 = 3。その後、7日目に価格 1 で買い、8日目に価格 4 で売れば利益は 4 − 1 = 3 となります。合計の利益は 3 + 3 = 6 であり、これがこのケースでの最大値です。 解法のアプローチ この問題は動的計画法(DP)を用いることで効率よく解け

  17. Pythonで解く二分木の最大パス和(Maximum Path Sum)

    問題の概要空でない二分木が1つ与えられます。この木における「最大パス和」を求めるのが目的です。ここでいうパスとは、あるノードを起点として、親子関係で結ばれたノードをたどり任意のノードへ至るまでのノード列のことです。パスには少なくとも1つのノードが含まれている必要がありますが、必ずしも根(ルート)ノードを通る必要はありません。例として、次のような二分木が入力された場合を考えてみましょう。この場合の出力は 32 となります。アルゴリズムの考え方各ノードを「パスの折り返し地点」として捉えるのがポイントです。あるノードを頂点とするパスの和は、「左部分木からの最大寄与 + 右部分木からの最大寄与 + そ

  18. Pythonで整数配列の最長連続シーケンスの長さを求める方法

    整数の配列が与えられたとき、その中に含まれる最も長い連続した数値のシーケンスの長さを求める問題を考えてみましょう。たとえば、入力が [100, 4, 250, 1, 3, 2] の場合、最長の連続シーケンスは [1, 2, 3, 4] となるため、答えは 4 になります。 解法のアプローチ この問題を線形時間 O(n) で解くために、以下の手順に従います。 まず配列をセット(集合)に変換し、変数 longest を 0 で初期化します。 セット内の各要素 i について、「i - 1 がセットに存在しない場合」のみ処理を開始します。これは i が連続シーケンスの始点であることを意味します。

  19. Pythonで解くWord Break II:メモ化再帰による単語分割パターンの全列挙

    問題の概要 空でない文字列 s と、空でない単語のリストからなる辞書 wordDict が与えられます。文字列 s にスペースを挿入して文を構成し、文中のすべての単語が辞書内の有効な単語となるようにします。このとき、考えられるすべての文を見つけるのがこの問題の目的です。 たとえば、文字列が「appleraincoat」、辞書が [app, apple, rain, coat, raincoat] の場合、「apple rain coat」と「apple raincoat」という2通りの文が構成できます。 解法のアプローチ:メモ化再帰 この問題は、メモ化(memoization)を組み合わせた

  20. Pythonで二分木の後順走査(ポストオーダートラバーサル)を反復処理で実装する方法

    二分木が与えられたとき、再帰を使わずに反復処理(イテレーティブな手法)で後順走査(ポストオーダートラバーサル)の結果を求める問題を考えてみましょう。たとえば、次のような二分木があるとします。この木に対する後順走査の出力は次のようになります。[9, 15, 7, 10, -10]後順走査とは後順走査は、各ノードを「左の子孫 → 右の子孫 → 自分自身」の順に訪問する走査方法です。上記の例では、まず左部分木の 9 を訪問し、次に右部分木の 15、7、その親の 10、最後に根の -10 を訪問します。解法のアプローチ再帰を使わずに後順走査を実現するには、スタックと「訪問済みフラグ」を組み合わせるのが

Total 8994 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:143/450  20-コンピューター/Page Goto:1 137 138 139 140 141 142 143 144 145 146 147 148 149