Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのheapqモジュールを使って2つのソート済みリストをマージする方法

この記事では、Pythonのheapqモジュールを使用して、2つのソート済みリストを1つにマージする方法を解説します。

例えば、list1 = [10, 20, 30, 40]list2 = [100, 200, 300, 400, 500]という2つのリストがある場合、マージ後は[10, 20, 30, 40, 100, 200, 300, 400, 500]のような結果が得られます。

heapqモジュールとは

heapqはPythonに標準で搭載されているライブラリモジュールのため、追加のインストールは不要です。利用する前にインポートするだけで使えます。

import heapq

heapqモジュールの主なメソッド

heapq.heapify(iterable)

イテラブルなデータセットをヒープデータ構造に変換します。

heapq.heappush(heap, element)

ヒープに要素を挿入し、挿入後にヒープ構造全体を再構築します。

heapq.heappop(heap)

ヒープの先頭(最小値)の要素を取り出して削除し、残りの要素に対してヒープ化を行います。

heapq.heappushpop(heap, element)

要素の挿入と取り出しを1つの処理で実行します。

heapq.heapreplace(heap, element)

こちらも挿入と取り出しを1つの処理で行いますが、先にヒープのルートから要素を削除してから、新しい要素を挿入する点が異なります。

heapq.nlargest(n, iterable, key=None)

イテラブルの中から最大のn個の要素を返します。

heapq.nsmallest(n, iterable, key=None)

イテラブルの中から最小のn個の要素を返します。

マージの実装例

それでは、実際にheapq.merge()を使って2つのソート済みリストをマージしてみましょう。

import heapq
first_list = [45, 12, 63, 95, 74, 21, 20, 15, 36]
second_list = [42, 13, 69, 54, 15]

first_list = sorted(first_list)
second_list = sorted(second_list)

print('First sorted list: ' + str(first_list))
print('Second sorted list: ' + str(second_list))

final_list = list(heapq.merge(first_list, second_list))
print('The final list: ' + str(final_list))

実行結果

First sorted list: [12, 15, 20, 21, 36, 45, 63, 74, 95]
Second sorted list: [13, 15, 42, 54, 69]
The final list: [12, 13, 15, 15, 20, 21, 36, 42, 45, 54, 63, 69, 74, 95]

まとめ

heapq.merge()を使えば、ソート済みの複数のリストを効率的に1つのソート済みリストへと統合できます。この関数はイテレータを返すため、大きなデータセットでもメモリ効率よく処理できるのが特徴です。リストとして扱いたい場合は、上記の例のようにlist()で変換しましょう。

  1. Pythonでマージソートを実装する方法をわかりやすく解説

    マージソート(Merge Sort)は、代表的なソートアルゴリズムのひとつです。ソート対象の配列の長さを n とすると、計算量は O(n log n) となり、非常に効率的な並べ替え手法として知られています。 マージソートは「分割統治法(Divide and Conquer)」という考え方に基づいたアルゴリズムです。まず、配列を半分ずつに再帰的に分割していき、要素が1つになるまで分割を続けます。その後、要素が1つだけのリスト同士を順にマージ(併合)しながら整列させていき、最終的に完全にソートされたリストを作り上げます。 この一連の処理によって、整列済みの配列を得ることができます。 マージソー

  2. PythonでGETメソッドを使用して情報を渡す方法【CGIプログラミング入門】

    GETメソッドとはGETメソッドは、エンコードされたユーザー情報をページリクエストに付加して送信する方式です。ページのURLとエンコードされた情報は「?」記号で区切られます。https://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2GETメソッドは、ブラウザからWebサーバーへ情報を渡す際のデフォルトの方法であり、送信した内容はブラウザのアドレスバー(Locationボックス)に長い文字列として表示されます。そのため、パスワードなどの機密情報をサーバーに送る場合には、GETメソッドは絶対に使用しないでください。また、GET