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はどれくらい使えるのか?
Microsoft は、大規模言語モデルのパフォーマンスを向上させる新しいツール、Jigsaw を発...
GPT-4 または LLM には推論機能がありますか?これは長年議論されてきた問題です。 LLM は...
この利便性は、近年旅行、観光、ホスピタリティ業界が積極的に導入している機械学習と人工知能の技術がなけ...
テクノロジーは既存の人間文化の延長です。テクノロジーは人類の知恵を広げた一方で、人々の偏見や差別も受...
長年にわたり、数億人の出稼ぎ労働者が経済建設と社会発展に積極的に参加し、中国の近代化推進に多大な貢献...
[[192649]]人工知能 (AI) は、今日最もエキサイティングで将来有望な最先端技術の 1 つ...
近年、需要の増加、エネルギーコストの高騰、持続可能性の問題が続く中、データセンターが注目を集めていま...
分析機関CCSインサイトは10日、来年には生成AI分野が現実の試練に直面する可能性があるとの予測を発...
国連のアントニオ・グテーレス事務総長は10月27日(現地時間10月26日)、国際社会がAIのガバナン...
[[340645]] [51CTO.com クイック翻訳] 人工知能が雇用に与える影響は、現在、さま...
Apache Sparkはビッグデータの処理や活用に最も広く使われているフレームワークの一つであり...