Python

 Computer >> コンピューター >  >> プログラミング >> Python
  1. Python Pandas - 指定したラベルに対応する左側のスライス境界を計算する方法

    指定されたラベルに対応する左側のスライス境界(slice bound)を計算するには、Pandas の index.get_slice_bound() メソッドを使用します。このとき、side パラメータに left を指定することで、該当ラベルの左側のスライス境界が返されます。必要なライブラリのインポートまず、必要なライブラリをインポートします。import pandas as pdPandas インデックスの作成次に、Pandas のインデックスを作成します。index = pd.Index([10, 20, 30, 40, 50, 60, 70])インデックスの表示作成した Pandas

  2. Pythonで範囲合計を効率的に求められるデータ構造を定義する方法

    整数のリストから構築できるデータ構造を作り、必要なときにいつでもインデックス i から j−1 までの要素の合計を効率的に求められるようにしたいと考えます。このデータ構造には、次の2つの機能を実装します。整数配列を受け取って新しいインスタンスを初期化するコンストラクタ開始インデックス i から終了インデックス j−1 までの要素の合計を返す get_sum(i, j)問題の例たとえば、入力が array = [5,2,3,6,4,7,8,9,3,2] の場合を考えてみましょう。オブジェクト obj を生成し、obj.get_sum(1,5) と obj.get_sum(4,8) を呼び出すと、

  3. Pythonでユーザーのレート制限チェックに対応したデータ構造を実装する方法

    問題の概要 今回は、「有効期限(expire)」を持つデータ構造を作り、ユーザーIDとタイムスタンプを受け取って、そのリクエストを許可するか拒否するかを判定する機能を実装します。リクエストが拒否されるのは、対象ユーザーの直近の成功リクエストから経過した時間が、設定された有効期限以内である場合のみです。 例えば、expire = 6 としてオブジェクト obj を生成し、次の順番でメソッドを呼び出した場合の出力を見てみましょう。 obj.limit(0, 10) → False:ユーザー0の初回リクエストであり、履歴がないため許可される obj.limit(0, 16) → False:前回の

  4. Pythonで3つ以上連続する同一ビットを解消する最小操作回数を求めるプログラム

    問題概要2進文字列 s が与えられます。ここで「任意の1ビットを選び、その値を 0 → 1、または 1 → 0 へ反転する」という操作を考えます。この操作を繰り返して、3つ以上の同一ビットが連続しない文字列を作るとき、必要な最小操作回数を求めるのが本記事のテーマです。入力例s = 10011100 の場合、答えは 1 になります。たとえばインデックス4(0始まり)の「1」を「0」に反転すれば 10010100 となり、3つ以上連続する同一ビットは存在しなくなります。解法の考え方ポイントは、文字列を「同じビットが連続している区間(ラン)」ごとに分割して考えることです。長さ n のランの中で3連続

  5. 【Python入門】2つの文字列が互いの回転かどうかを判定する方法

    この記事では、2つの英文字列 s と t(大文字・小文字が混在していても可)が与えられたとき、一方がもう一方の回転であるかどうかを判定するプログラムを Python で実装する方法を解説します。回転とは?文字列の「回転」とは、文字列の先頭からいくつかの文字を取り除き、それを末尾に移動させる操作によって得られる文字列のことです。例えば、s = koLKAta と t = KAtakoL が与えられた場合、t は s を回転させた結果と一致するため、出力は True になります。解法のアプローチこの問題は、以下の手順で効率的に解くことができます。長さの確認: s と t の長さが異なる場合は、回転

  6. Pythonでランレングス符号化文字列をデコードするイテレータクラスの実装方法

    問題の概要 ランレングス符号化(Run-Length Encoding)された小文字のみの文字列 s を受け取って初期化するイテレータクラスを定義することを考えます。このイテレータには、次の2つのメソッドを実装します。 next():イテレータ内の次の要素を1つ返します hasnext():次の要素がまだ存在するかどうかを判定します 例えば、入力が s = 2b1a の場合、この文字列でオブジェクトを生成し、next() → hasnext() → next() → next() → hasnext() の順に呼び出すと、出力は b、True、b、a、False となります。 解決のため

  7. 【Python】隣り合わない条件で全員が座席に着席できるかを判定するアルゴリズム

    n 人の人が座席を探している状況を考えます。座席の状態はビットのリストで表され、1 はすでに使用されている座席、0 は空いている座席を意味します。ただし、隣り合う座席に同時に着席することはできません。このとき、n 人全員が座席に見つけられるかどうかを判定するのが本記事のテーマです。 例えば、入力が n = 2、seats = [1, 0, 0, 0, 1, 0, 0] の場合、出力は True になります。インデックス 2 と 6 の空き座席に、互いに隣接しない形で着席できるからです。 解法のアプローチ この問題は、連続する空き座席(0 の並び)ごとに、条件を満たして着席できる人数を数えること

  8. Pythonでsetクラスを使わずにセット(集合)データ構造を自作するプログラム

    本記事では、Pythonの組み込みsetクラス(ライブラリ)に頼らず、独自のセット(集合)データ構造を実装する方法を解説します。実装するセットは、以下のメソッドを持つものとします。 コンストラクタ:セットの新しいインスタンスを生成する add(val):整数valをセットに挿入する exists(val):valがセット内に存在するかどうかを判定する remove(val):valをセットから削除する 例えば、セットsを生成し、s.add(10)、s.add(20)、s.add(10)、s.exists(10)、s.remove(10)、s.exists(10)、s.exists(20)

  9. Pythonで配列を右回転して1~nの連続数列(昇順・降順)にできるか判定するプログラム

    問題の概要n 個の要素を含む数値リスト nums が与えられたとします。nums を任意の回数だけ右に回転(シフト)することで、[1, 2, ..., n](昇順)または [n, n-1, ..., 1](降順)という「最初の n 個の自然数」の並びにできるかどうかを判定します。たとえば、入力が nums = [5, 6, 1, 2, 3, 4] の場合、4 回右に回転すると [1, 2, 3, 4, 5, 6] になるため、答えは True となります。解法の考え方鍵となるのは「隣接する要素の差」に注目することです。1 から n までの数字を環状につなげると、隣り合う数字同士の差は 1 にな

  10. Pythonで最大頻度と同じ出現回数を持つ最短サブリストの長さを求める方法

    数値のリスト nums が与えられたとします。nums 内で最も頻度が高い数値の出現回数を k とするとき、「その中で最も頻度の高い要素の出現回数も同じく k となるような、最短の部分リスト」の長さを求めるのが今回の課題です。問題の例例えば、入力が nums = [10, 20, 30, 40, 30, 10] の場合、出力は 3 になります。このリストでは 10 と 30 がそれぞれ 2 回出現しており、最大頻度は k = 2 です。ここで部分リスト [30, 40, 30] を選ぶと、30 を含み、かつ 30 の出現回数も 2 回である最短の部分リストとなります。そのため答えは長さ 3 で

  11. Pythonで隣接する桁が同じにならない最小の数を生成するプログラム

    文字列 s が与えられ、使用できる文字は「1」「2」「3」「?」の4種類とします。「?」の位置には「1」「2」「3」のいずれかを自由に置くことができます。このとき、隣接する2つの桁が同じ数字にならないという条件を満たす中で、作成可能な最小の数を求めるのが本記事の目的です。問題例たとえば、入力が s = 2??3? の場合、出力は 21231 となります。各「?」を左から順に埋めていき、隣接する桁同士が一致しないように最小の数字を選ぶことで、この結果が得られます。解法のアプローチこの問題は貪欲法(グリーディー法)で解くことができます。文字列を左から順に走査し、「?」に遭遇するたびに、その位置の前

  12. Pythonで隣接しない要素ペアの最小合計を効率的に求める方法

    問題概要 数値のリスト nums が与えられたとき、インデックスのペア (i, j) のうち、i < j かつ j − i > 1 を満たすもの、つまり互いに隣接していない要素同士のペアを考えます。その中で最も小さくなるペアの合計値を求めるのがこの問題です。 例えば、入力が nums = [3, 4, 2, 2, 4] の場合、出力は 5 になります。これは値 3 と 2 を選ぶと合計が 5 になるためです。なお、2 と 2 の組み合わせは選べません。この2つの要素は隣接しているため、j − i > 1 という制約に違反するからです。 解き方のアプローチ この問題は、リスト

  13. Pythonで2進数表現の「1」の個数に基づいて数値をソートするプログラム

    数値のリスト nums が与えられたとします。ここで、各数値を2進数表現にしたときの「1」の個数に基づいて、リストを昇順にソートすることを考えます。「1」の個数が同じ数値が複数ある場合は、数値そのものの大小関係に従って並べ替えます。 例えば、入力が nums = [4, 1, 12, 7, 6] の場合、出力は [1, 4, 6, 12, 7] になります。その理由は以下の通りです。 4 の2進数表現は 0100 1 の2進数表現は 0001 6 の2進数表現は 0110 12 の2進数表現は 1100 7 の2進数表現は 0111 したがって、「1」の個数で並べた結果は [1, 4, 6

  14. Pythonで昇順ソート済みリストの二乗要素をソート順に求めるプログラム

    昇順にソートされた数値のリスト nums が与えられたとき、各要素を二乗したうえで、結果をソートされた順序で返すことを考えます。例えば、入力が nums = [-8, -3, 0, 5, 6] の場合、出力は [0, 9, 25, 36, 64] となります。負の数を含むリストでも、二乗後の値が正しく昇順に並ぶ点がポイントです。解法のアプローチ:双方向ポインタ(Two Pointers)単純に全要素を二乗してから再度ソートする方法もありますが、計算量は O(n log n) になります。ここでは、元のリストがすでにソートされているという性質を活かし、双方向ポインタを使った O(n) の効率的な

  15. Pythonでリストが交互に増加・減少しているかどうかを判定するプログラム

    問題の概要 数値のリスト nums が与えられ、それが「厳密に増加 → 厳密に減少 → 厳密に増加 → …」というように、増加と減少が交互に入れ替わっているかどうかを判定します。ただし、リスト全体がずっと厳密に増加し続けている場合も条件を満たすものとみなします。 たとえば入力が [2, 4, 8, 7, 5, 1, 5, 7, 2, 1] の場合、出力は True になります。[2, 4, 8] が増加し、続く [7, 5, 1] が減少、その後の [5, 7] が再び増加、最後の [2, 1] が減少しており、増加と減少がきちんと交互に現れているためです。 解法の考え方 一見すると、増加区間

  16. キーボードのキーがスタック(連打)した状態で入力された文字列が、意図したターゲット文字列と一致するか判定するPythonプログラム

    問題の概要2つの文字列 s と t があるとします。本来は t を入力したいのですが、キーボードの一部のキーがスタック(押しっぱなし)してしまい、同じ文字が1回以上繰り返し入力されてしまう状況を考えます。このとき、実際に入力された文字列 s が、もともと t を打とうとした結果としてあり得るものかどうかを判定するのがこの問題です。例えば、s = appppleee、t = apple の場合、「a」「pppp」「l」「eee」というように、各キーが1回以上連続で押された結果として t を作れるため、出力は True になります。解法のアプローチこの問題は、2つのポインタを使った貪欲法(グリーデ

  17. Pythonで最初のN個の奇数の合計を求めるプログラム

    この記事では、数値 n が与えられたときに、最初の n 個の正の奇数の合計を求める Python プログラムを紹介します。例えば、入力が n = 10 の場合、最初の10個の奇数は [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] となり、その合計は 100 になります。解法のポイントこの問題を解くには、以下の手順に従います。重要な性質として、最初の n 個の奇数の合計は常に n の2乗(n²)と等しいということが知られています。したがって、結果を得るには単に n * n を返すだけで済みます。実際に確認してみましょう。1 = 1²1 + 3 = 4 = 2²1 + 3

  18. Pythonでペアの合計をチェックするデータ構造を作成する方法

    はじめにここでは、次の2つのメソッドを持つデータ構造を作成することを考えてみましょう。add(val): 値 val をデータ構造に追加しますfind(val): 合計が val となる2つの要素が存在するかどうかをチェックしますこのデータ構造は、クエリが来たときに即座に結果を返せるように設計する必要があります。find() が呼ばれるたびにすべての数値の組み合わせを検索するような非効率な処理は避けたいところです。例として、オブジェクト obj を作成し、6, 14, 3, 8, 11, 15 の数値を追加した後、obj.find(9)、obj.find(11)、obj.find(15) を呼

  19. Pythonでターゲット未満となる最大のペア合計を求めるプログラム

    問題の概要 数値のリスト nums とターゲット値 target が与えられたとします。このとき、合計がターゲット未満(target - 1 以下)となる2つの数値のペアの中から、最も大きな合計を見つける必要があります。 たとえば、入力が nums = [8, 3, 4, 9, 2]、target = 8 の場合、出力は 7 になります。これは、8 未満となる最大のペアの合計が 4 + 3 = 7 だからです。 解法のアプローチ この問題は「ソート + 両端ポインタ(ツーポインタ法)」というテクニックを使うことで効率的に解けます。手順は以下のとおりです。 リスト nums を昇順にソートし

  20. Pythonでソート済みリストから2つの数の合計がkになるか判定するプログラム

    昇順にソートされた数値リスト nums と、別の値 k が与えられているとします。このとき、リストから選んだ2つの要素の合計が k と一致するかどうかを判定する必要があります。要素には負の数や0も含まれる可能性があります。さらに、この問題は定数のメモリ領域(空間計算量 O(1))で解くことが求められます。 例として、nums = [-8, -3, 2, 7, 9]、k = 4 の場合、出力は True になります。これは、7 と -3 を選ぶと 7 + (-3) = 4 となり、k と一致するためです。 解法のアプローチ:二ポインタ法 この問題は「二ポインタ(two-pointer)テクニック

Total 8994 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:386/450  20-コンピューター/Page Goto:1 380 381 382 383 384 385 386 387 388 389 390 391 392