使用 bisect 快速匹配商品編號前 2-3 碼並提前訂閱
November 26, 2023
關於 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