我想爲所有以給定子字符串開頭的元素搜索一個排序的字符串列表。在Python中執行二進制搜索字符串前綴
下面是查找所有確切匹配的例子:
import bisect
names = ['adam', 'bob', 'bob', 'bob', 'bobby', 'bobert', 'chris']
names.sort()
leftIndex = bisect.bisect_left(names, 'bob')
rightIndex = bisect.bisect_right(names, 'bob')
print(names[leftIndex:rightIndex])
它打印['bob', 'bob', 'bob']
。
相反,我想搜索以'bob'開始的所有名稱。我想要的輸出是['bob', 'bob', 'bob', 'bobby', 'bobert']
。如果我可以修改對分搜索的比較方法,那麼我可以使用name.startswith('bob')
來執行此操作。
作爲一個例子,在Java中它會很容易。我會使用:
Arrays.binarySearch(names, "bob", myCustomComparator);
其中「myCustomComparator」是一個比較器,是以startswith方法(和一些額外的邏輯)的優點。
如何在Python中執行此操作?
根據您的需要,您可能能夠使用trie數據結構 – jterrace