2021-04-01に投稿

Python 標準ライブラリ bisect 配列二分法

配列二分法で挿入位置の取得や挿入を行う事をサポートするライブラリです。

bisect 配列二分法の使い方

import bisect

items = [1, 2, 3, 3, 3, 5, 6, 6, 7, 9]

# bisect_right(a, x, lo=0, hi=len(a)) リストaに順序を保ったままxを挿入できる位置を取得
# bisect(a, x, lo=0, hi=len(a)) リストaに順序を保ったままxを挿入できる位置を取得
# すでにxがaに含まれる場合右端の位置
# lo:開始位置
# hi:終了位置~~<del>
bisect.bisect_right(items, 4) # => 5
all(v <= 4 for v in items[0:5]) # => True
all(v > 4 for v in items[5:]) # => True

bisect.bisect_right(items, 6) # => 8
all(v <= 6 for v in items[0:8]) # => True
all(v > 6 for v in items[8:]) # => True

# bisect_left(a, x, lo=0, hi=len(a)) リストaに順序を保ったままxを挿入できる位置を取得
# すでにxがaに含まれる場合左端の位置
# lo:開始位置
# hi:終了位置</del>~~
bisect.bisect_left(items, 4) # => 5
all(v < 4 for v in items[0:5]) # => True
all(v >= 4 for v in items[5:]) # => True

bisect.bisect_left(items, 6) # => 6
all(v < 6 for v in items[0:6]) # => True
all(v >= 6 for v in items[6:]) # => True

# insort_right(a, x, lo=0, hi=len(a)) リストaに要素xを順序を保ったまま挿入
# insort(a, x, lo=0, hi=len(a)) リストaに要素xを順序を保ったまま挿入
# すでにxがaに含まれる場合右端の位置
# lo:開始位置
# hi:終了位置
bisect.insort_right(items, 4)
items # => [1, 2, 3, 3, 3, 4, 5, 6, 6, 7, 9]

# insort_left(a, x, lo=0, hi=len(a)) リストaに要素xを順序を保ったまま挿入
# すでにxがaに含まれる場合左端の位置
# lo:開始位置
# hi:終了位置
bisect.insort_left(items, 6)
items # => [1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 9]
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント