使用 bisect 快速匹配商品編號前 2-3 碼並提前訂閱

November 26, 2023

img

關於 bisect

在 Python 中 bisect 有很多種用法,詳細請見 Everything You Can Do with Python's bisect Module

其中一個功能就是對於 str array 快速匹配前綴,並將符合的字串篩選出來。

當 array 很大時,這個方法基本上都比迭代來的快。

對於快速匹配股票商品編號,並向券商訂閱報價資訊來說就很方便,例如當使用者輸入 "2" "3" "3"

就能將其匹配到['2330', '2331', '2332', '2337', '2338', '23383'] 這些商品編號

進而先提前訂閱這些商品的報價和五檔。

當使用者輸入到 2330 時,報價就已經訂閱,再把剩餘的 2331, 2332, … 解訂即可。

對於商品檔有幾萬來說,是很方便的功能。

def prefixSearch(words: list[str], prefix: str, isSorted: bool = False) -> list[str]:
    if not isSorted:
          words.sort()
    start = bisect_left(words, prefix)
    matches = []
    for i, s in enumerate(words[start:]):
        if s.startswith(prefix):
            matches.append(s)
        else:
            break
    return matches
Tags: trading python