Pythonアルゴリズムの一般的なテクニックと組み込みライブラリ 近年、Python の人気が高まるにつれ、徐々に多くのプログラマーに好まれるようになりました。多くのプログラマーは、問題を練習するための最初の言語として Python を使い始めています。 最近、Python を使用して問題を解決していたときに、Python でよく使用されるライブラリ API と問題解決手法を見つけたいと思いました。これは C++ の STL ライブラリのドキュメントに似ていますが、残念ながら見つけられなかったので、質問に答えたりインターネットを検索したりした自分の経験を組み合わせて、自分とみんなが読めるドキュメントを作成することにしました。 1. 入力と出力: 1.1 最初の行には、スペースで区切られた 2 つの値 n と m が与えられます。最初の n は、次に n 行の入力があることを決定し、m は各行にいくつの数字があるかを決定します。m 個の数字はスペースで区切られます。 解決策: Python の入力関数が受け取る入力はデフォルトで文字列なので、文字列のカット、強制型変換、リスト ジェネレーターを使用することで入力の問題を完全に解決できます。コードは次のとおりです。
同様に、カンマ (,) を使用して区切る場合は、同じ値を split 関数に渡すだけです。 1.2 数字の行を出力する Python の print 関数はデフォルトで改行を終端文字として使用するため、必要な間隔に変更する必要があります。コードは次のとおりです。
end は print 関数のパラメータで、出力の終了文字を決定します。ここで、これをスペースに変更すると、スペースで区切られた数字の行が出力されることになります。他の文字は自由に変更できます。 2. 空リストの生成、文字列の変更、リストの走査 2.1コードを書くときに、長さと初期値を持つ空のリストが必要になることがあります。生成方法は次のとおりです。
2.2 Python では、文字列をその場で変更することはできません。変更ごとに新しい文字列を生成すると、変更の数が多く、文字列が非常に大きい場合にオーバーヘッドが非常に高くなります。したがって、一般的には文字列はリストに変換され、変更されてから元に戻されます。
2.3 Python でリストをトラバースする方法は数多くあります。最も直接的な方法は、リストを直接反復することです。ただし、インデックスに基づいて配列を操作し、配列の値を変更する必要があることが多いため、次のコードの 2 番目と 3 番目の方法をお勧めします。
3. コレクションライブラリの利用 3.1 デキュー deque は Python のキューです (FIFO、先入れ先出し)。キューの先頭をポップする場合、キューの方がリストよりも高速です。 特に BFS (深さ優先探索) を使用する場合は、キューを使用する必要があります。いくつかの deque 使用コードは次のとおりです。
3.2 カウンター カウンターは、シーケンスをカウントし、シーケンス内の要素の出現回数を計算できるカウンターです。 サンプルコードは次のとおりです。
3.3 defaultdict — デフォルト値を持つ辞書 通常、作成された辞書 dict にはデフォルト値は含まれません。つまり、辞書にキー a が含まれていない場合、dct{a} を呼び出すとエラーが発生します。 アルゴリズムやデータ構造を設計する際には、たとえそれが単なるデフォルト値であっても、任意のキーを辞書から取得できることが望まれます。このとき、defaultdict を使用する必要があります。 たとえば、グラフ内のノードに接続されたノードを辞書で表す場合、このノードをキーとして使用し、その値としてそれに接続されたノードのリストを作成します。このとき、defaultdict(list) を使用して、デフォルト値がリストである辞書を作成できます。
3.4 まとめ これらは、コレクション内のアルゴリズムやデータ構造を記述するためによく使用されるものです。ソートされた辞書や名前付きタプルなどの他のものはほとんど使用されません。 4. ソート 4.1 リストの並べ替え リストをソートする方法は 2 つあります。1 つは、リストの組み込みソート関数を使用することです。ソート関数はリストを直接変更し、戻り値はありません。比較キーと比較関数は、パラメーター キーを通じてカスタマイズできます。 2つ目の方法は、Pythonのsorted関数を使う方法です。この関数は自由度が高く、比較関数や比較キーを自分で設定して新しいリストを返すことができます。 比較関数をカスタマイズする必要がある場合は、functools ライブラリから cmp_to_key 関数をインポートして、比較関数をキーに変換する必要があります。使用コードは次のとおりです。
4.2 辞書/タプルのリストのソート 辞書をソートする必要がある場合 (item 関数を使用して辞書をタプル リストに変換)、または各項目に 2 つの値があるタプル リストをソートする必要がある場合は、sorted 関数のキーを使用してソートする値を決定する必要があります。コードは次のとおりです。
5. 順列と組み合わせ Python の組み込みモジュール itertools には、順列関数や組み合わせ関数など、いくつかの反復関連関数が統合されています。 5.1 配置 permutations 関数はリストを受け取り、リスト内のすべての要素の完全に順序付けられたリストを返します。
5.2 組み合わせ 組み合わせ関数 combinations は 2 つのパラメータを受け取ります。最初のパラメータは結合するリストで、2 番目のパラメータは結合するリストから抽出される要素の数を表す正の整数です。結合されたリストを返します。
6. ヒント 6.1 Pythonには、可変型と不変型があります。関数にパラメータを渡す場合:
関数に変数型を渡す必要がある場合は、次のように関数の最初の行でディープコピーを作成できます。
6.2 リスト内の要素を削除すると、リストの末尾の要素が自動的に前方に移動し、エラーが発生します。 たとえば、リストが [1,2,3,4,5,6] で、リスト内の偶数を削除したい場合、次のコード (間違ったデモンストレーション) に示すように、偶数を直接検索し、そのインデックスを使用して削除すると、申し訳ありませんが、問題が発生します。
次のコードは正しいデモンストレーションです。
より複雑なスクリーニング方法が必要な場合は、if i%2 !=0 を関数判定に変更し、関数内にスクリーニング方法を実装できます。 6.3 辞書要素にアクセスするにはgetメソッドを使用する 前述のように、通常の dict 辞書にはデフォルト値がないため、値を見つけるために角括弧を使用してキーを直接配置すると、エラーが発生する可能性があります。 この状況を回避するには、辞書のキーを使用して値を取得するときに、辞書の get 関数を使用する必要があります。 get 関数の最初のパラメータはキーで、2 番目のパラメータはオプションです (デフォルトは None)。渡されたキーが辞書に見つからない場合、2 番目のパラメータによって割り当てられた値が返されます。 7. まとめ 上記はPythonを使って練習問題を解いた際にまとめたものです。間違っている点がありましたらご指摘ください。 この記事は、私自身のための文書を作成するとともに、皆様にとっての利便性を提供することを目的としています。 私の公開アカウント[プログラマー]をフォローして、福祉に関する多くの知識を受け取ってください。 洛陽でございます。ご来訪ありがとうございます。 |
<<: アフリカはパンデミックの最中に包括的な接続性を構築しており、明確な投資方針を持っている
>>: ロボットは共感を持つことができるか?感情AIはどれくらい使えるのか?
最近、米国の市場調査機関であるナビガントリサーチが、自動運転の競争力に関する新たなランキングを発表し...
スマートホームの発展過程で、その定義は何度も変化してきました。当初のリモートコントロールの概念から、...
新型コロナウイルス肺炎の流行は社会全体の生産と生活に影響をもたらしています。企業は、感染拡大の影響を...
GPT-4 のリリースは AI の歴史に残る大きな出来事であることは間違いありません。しかし、時が経...
[[285204]]現在、モバイルインターネット、ビッグデータ、スーパーコンピューティングなどの新し...
[[219484]] 2017 年に 1 年間眠っていたのに、突然目が覚めて、今年世界で最も誇るべ...
このガートナーのハイプサイクルは、AIが企業に及ぼすさまざまな影響を強調しています。ガートナーの 2...
[[318509]]プラトンについてテンセントの高性能グラフコンピューティングフレームワークPlat...
米国のハーバード大学とエモリー大学の研究者らが協力し、ヒト幹細胞から抽出した心筋細胞を使った「人工魚...
会話型 AI は今日のイノベーションに不可欠な要素であり、多くの企業のビジネスを変革するでしょう。 ...
今日のデジタル時代では、顧客獲得の方法はよりシンプルになりましたが、さまざまなプラットフォームでの煩...
中国は教育における人工知能の応用において徐々に優位に立っています。顔認識からスタートアップ、医療教育...
10月26日、中国科学技術協会社会サービスセンターの支援を受けて、北京ソフトウェア情報サービス協会(...
最近、「重慶の人気列車がドローンに衝突され停止」する動画がインターネット上で広く出回っている。 [[...
サイバーセキュリティのスキル不足は、政府を含むさまざまな地域、市場、セクターの組織に引き続き影響を及...