【Python入門】Pythonのheapq.heappushpop関数とは?使い方と活用方法を徹底解説(Python 3.11)

Python

はじめに

Pythonの標準ライブラリには、便利なデータ操作用モジュールが多数存在します。その中でもheapqモジュールは、ヒープ(優先度付きキュー)を扱う際に役立ちます。本記事では、heapqモジュールの中でも特に便利なheapq.heappushpop()関数について、基本的な使い方から応用例まで詳しく解説します。

heapq.heappushpop関数とは?

  • heapq.heappushpop()関数は、ヒープに新しい要素を追加すると同時に、ヒープ内の最小要素を取り出す関数です。

この関数は次のような場合に便利です。

  • 限られたサイズのデータ集合で最小要素を維持する場合
  • メモリ効率の良い方法でデータの挿入と削除を同時に行いたい場合

heapq.heappushpop関数の基本構文

import heapq

heapq.heappushpop(heap, item)
  • heap: ヒープとして機能するリスト
  • item: 挿入する要素

この関数は、挿入された要素をヒープに追加した後に、最小要素を取り出して返します。

heapq.heappushpop関数の使用例

例1: 基本的な使い方

import heapq

heap = [3, 5, 7, 10]
heapq.heapify(heap)

print("Before heappushpop:", heap)
result = heapq.heappushpop(heap, 4)

print("After heappushpop:", heap)
print("Popped element:", result)

出力:

Before heappushpop: [3, 5, 7, 10]
After heappushpop: [4, 5, 7, 10]
Popped element: 3

heapq.heappushpop関数の応用例

例2: 限られたサイズのデータ集合の維持

import heapq

def top_n_elements(iterable, n):
    heap = []
    for item in iterable:
        if len(heap) < n:
            heapq.heappush(heap, item)
        else:
            heapq.heappushpop(heap, item)
    return sorted(heap, reverse=True)

numbers = [1, 3, 5, 7, 9, 2, 4, 6, 8]
result = top_n_elements(numbers, 3)
print("Top 3 elements:", result)

出力:

Top 3 elements: [9, 8, 7]

まとめ

heapq.heappushpop()関数は、データの追加と削除を効率よく行える便利な関数です。大量のデータから上位N個の要素を抽出する際など、メモリやパフォーマンスの観点からも有用です。Pythonの標準ライブラリを活用し、より効率的なプログラムを作成しましょう。