目次
はじめに
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の標準ライブラリを活用し、より効率的なプログラムを作成しましょう。