Pythonのheapqとは?毎回sortせずに最小値をすばやく取り出す仕組みを初心者向けに解説
一番小さい値や優先度の高い仕事を何度も取り出すとき、毎回sortしていませんか。標準ライブラリのheapqを使うと、リストをヒープという形に整えて、最小値を効率よく出し入れできます。heappushとheappopの基本、上位N件を取るnlargest、優先度付きキューの作り方、Python 3.14で加わった最大ヒープ用の関数まで初心者向けに解説します。
Python WebAcademy Blog
Python入門、文法、設計、学習方法の記事をキーワードやタグから探せます。
新着記事
263件
一番小さい値や優先度の高い仕事を何度も取り出すとき、毎回sortしていませんか。標準ライブラリのheapqを使うと、リストをヒープという形に整えて、最小値を効率よく出し入れできます。heappushとheappopの基本、上位N件を取るnlargest、優先度付きキューの作り方、Python 3.14で加わった最大ヒープ用の関数まで初心者向けに解説します。
パスワードのリセットURLやAPIキーを、randomで作っていませんか。randomの乱数は計算で先読みできるため、秘密の値には向いていません。標準ライブラリのsecretsを使えば、OSの乱数で予測できないトークンが1行で作れます。token_hexやtoken_urlsafeの使い分け、パスワードの作り方、比較で使うcompare_digestまで初心者向けに解説します。
関数の中で関数を作って返す書き方を見て、何の役に立つのかわからなかった方は多いと思います。クロージャは、外側の変数を覚えたまま持ち歩く関数のことです。税込み計算やカウンターを例に、nonlocalの役割、globalとの違い、関数がどこに記憶を置いているのか、ループの中で作ると全部同じ値になる落とし穴、クラスとの使い分けまで、実際に動かせるコードで順番に整理していきます。
書いたスクリプトが遅いとき、あやしそうな場所を勘で直していませんか。標準ライブラリのcProfileを使えば、どの関数に何秒使ったかが一覧で出ます。コマンド1行で始める使い方から、ncallsやtottimeとcumtimeの読み分け、範囲を絞った計測、SnakeVizでの可視化、Python 3.15で入るprofilingパッケージまで、実際に動かした出力を見ながら初心者向けに解説します。
ファイルを分けて整理したとたん、cannot import name ... most likely due to a circular import というエラーが出て動かなくなった。そんな循環インポートのしくみを、IT初心者向けにやさしく解説します。なぜ片方のモジュールが未完成のまま読まれるのか、traceback のどこを見れば原因がわかるのか、共通部分の切り出し・import文の書き換え・関数の中でのimport・TYPE_CHECKINGという4つの直し方まで、実際に動かした結果を見ながら整理します。
実行したスクリプトが無反応のまま数分、動いているのか固まっているのかわからない。そんな不安を消してくれるのがtqdmです。ループを包むだけで進捗バーが出る基本から、バーに並ぶ数字の読み方、総数がわからないときのtotal指定、printでバーが崩れる理由とtqdm.write、pandasのapplyへの適用、そして自動実行のログを汚さないための設定まで、手元で動かした出力を見ながら初心者向けに解説します。
Pythonの継承で必ず出てくるsuper()を、IT初心者向けにやさしく解説します。子クラスに__init__を書くと親の初期化が消える理由、super()が実は親クラスではなくMRO(メソッド解決順序)の次を指していること、親の名前を直書きすると途中のクラスが飛ばされること、2引数のsuper()が壊れる場面まで、手元のPython 3.11で動かした結果と表で順番に整理していきます。
Pythonのデフォルト引数でリストや辞書を指定すると、前回の呼び出しの結果が次の呼び出しに残ってしまいます。デフォルト値が関数の定義時に1回だけ作られる仕組み、__defaults__で犯人を確かめる方法、Noneを目印にする定番の直し方、時刻をデフォルトにすると時間が止まる話、dataclassのdefault_factory、ruffのB006で機械的に見つけるところまでを、手元で動かした結果とあわせて整理します。
Pythonのzoneinfoモジュールを、日付の扱いに不安がある方にもわかるようにやさしく解説します。時差を持たない日時が引き起こすズレ、ZoneInfoで地域を指定する書き方、astimezoneでUTCと行き来する方法、utcnow()が非推奨になった理由、サマータイムをまたぐと1日足しても23時間しか進まない落とし穴、そして保存と表示の分け方まで。手元で動かした結果と比較表で整理します。
Pythonのdocstringを、コードに説明を書き慣れていない方にもわかるようにやさしく解説します。コメントとの役割の違い、PEP 257が示す1行と複数行の書き分け、help()が読んでいる正体、GoogleスタイルやNumPyスタイルの選び方、doctestで使用例をそのままテストにする方法、そして実装とずれたときの怖さまで。手元で動かした結果と比較表で整理します。
Python学習ロードマップ
記事で気になったテーマを、順番に手を動かしながら学べます。
Step 1
未受講受講後にできること
Step 2
未受講受講後にできること
Step 3
未受講受講後にできること