Pythonのbisectを用いてソートされたリスト内で特定の値の挿入位置を見つけたり、新しい値を適切な位置に挿入したりする関数を定義してみます。
今回はbisectを用います。このライブラリ・モジュールはPythonの標準ライブラリですので、事前にインストールする必要はありません。
■Python
今回のPythonのバージョンは、「3.10.9」を使用しています。(Windows11)(pythonランチャーでの確認)
■bisectを用いてリスト内で特定の値の挿入位置を発見、新しい値を適切な位置に挿入
では、bisectを用いてリスト内で特定の値の挿入位置を発見、新しい値を適切な位置に挿入するスクリプトを書いていきます。
■コード
import bisect # ソートされたリストを作成 sorted_list = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] def find_insertion_point(value): # valueを挿入する位置を見つける index = bisect.bisect_left(sorted_list, value) return index def insert_into_sorted_list(value): # valueを正しい位置に挿入する index = bisect.bisect_left(sorted_list, value) sorted_list.insert(index, value) # 挿入位置を探してみる insert_value = 7 insert_index = find_insertion_point(insert_value) print(f"値 {insert_value} はインデックス {insert_index} に挿入されるべきです") # 値を挿入してリストを更新 new_value = 13 insert_into_sorted_list(new_value) print(f"{new_value} を挿入した後のリスト: {sorted_list}")
まずは、bisectモジュールをインポートします。このモジュールには、ソートされたリスト内での挿入位置の検索や値の挿入に関する関数が含まれています。
次にソートされたリストを作成します。今回は事前にソートされたリストsorted_listを用意しています。これは、既に昇順でソートされています。
作成後、find_insertion_point(value)という関数を定義します。この関数は、指定したvalueの挿入位置を見つけるためのものです。bisect.bisect_left() 関数を使用して、sorted_list 内で value が挿入されるべきインデックスを計算し、その結果を返します。この関数は挿入位置を計算するだけで、リスト自体の変更は行いません。
定義後、さらにinsert_into_sorted_list(value) という関数を定義します。この関数は、指定した value を正しい位置に挿入するためのものです。bisect.bisect_left() 関数を使用して、value の挿入位置を計算し、その位置に対して sorted_list に value を挿入します。これにより、リスト内の要素が正しい順序を保ったまま挿入されます。
関数を定義後、挿入位置の探索と出力します。insert_value として今回は値である7の挿入位置を find_insertion_point() 関数を使って求め、その結果を出力します。
出力後、値の挿入とリストの更新します。new_valueとして今回は値である13を insert_into_sorted_list() 関数を使ってリストに挿入し、その後の sorted_list の状態を出力します。
■実行・検証
このスクリプトを「s_sorted.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、bisect.bisect_left()関数を使って挿入位置が発見され、さらにbisect.insort_left()関数を使ってリストに新しい値を挿入し、挿入されたリストを出力させることができました。
コメント