← クエスト一覧

クエスト56:heapqを使おう

スライド 1 / 6
コーデ
💻 コード例
実行結果
← クエスト一覧
🐍 Python / Quest 56 / 85

クエスト56:heapqを使おう

発展 +10 XP
🏠
今回の課題
[5, 1, 3, 2, 4] を heapq で小さい順に取り出して、1行ずつ表示しよう。
📖 解説を見る
⛰️ heapq(ヒープ)って何?

いつでも「いちばん小さい値」を素早く取り出せるデータ構造です。全体を並べ替えなくても、最小値だけをすぐ取れます。

✏️ 書き方:
import heapq
heapq.heapify(nums)
 ← リストをヒープにする
heapq.heappop(nums) ← 最小値を取り出す
heapq.heappush(nums, x) ← 追加する

📋 作るもの:
・まず nums をヒープにする(import とデータは書いてあるよ)
・中身が無くなるまでくり返して、最小値を1つずつ取り出す
・取り出すたびに表示する。結果は 1 → 2 → 3 → 4 → 5 の順になる
・ヒープにする操作を忘れると、正しい順に取り出せないので注意

💡 どこで使う?

「優先度の高いものから処理する」場面で使います。優先度つきキュー、点数トップK個の抽出、最短経路を求めるダイクストラ法など。毎回ソートし直すより効率よく最小(最大)を取り出せます。

⚠️ ポイント:
heapify でヒープ化してから heappop で取り出す
・取り出すたびに、残りの中の最小値が出てくる
ヒントを見る
まず heapify でリストをヒープに変えてから、heappop で最小値を1つずつ取り出そう。while の条件にリストをそのまま書くと、空になるまでくり返せる。
期待する出力
1
2
3
4
5
📄 見本
「答えを見る」を押すと、お手本のコードが出ます。クリックでコピーできます。
💻 コードエディタ
実行すると結果がここに表示されます
正解!見本と同じになりました。
次へ →
🏠 ホームへ

れんしゅうもんだい

☑ 0 / 3 正解 レッスンに戻る

全問正解でクエストクリア!

未挑戦

問題 1: heapq.nsmallest で [8, 3, 1, 7, 2, 5] の最小3つをリストで表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
[1, 2, 3]
未挑戦

問題 2: heapq.nlargest で [8, 3, 1, 7, 2, 5] の最大2つをリストで表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
[8, 7]
未挑戦

問題 3: タスクに優先度をつけてheapqで管理し、優先度の低い順に「1: 国語 2: 英語 3: 数学」と表示しよう!

実行結果
実行できたよ!
もう一度チャレンジ!
📄 見本の出力
1: 国語 2: 英語 3: 数学
コピーしました!