嗯......我有一個簡單的請求,建立一個條目,即時過濾條目列表。 (想想編輯器自動完成功能)如何使用正則表達式快速過濾列表?
請求是在整個列表上支持正則表達式過濾器,並只顯示匹配的條目。
例如,
該列表包含:
abc.efg.hij.entry
abc.ddd.hij.entry2
hij.some.value.entry
打字在條目
Value : List
hij : abc.efg.hij.entry, abc.ddd.hij.entry2, hij.some.value.entry
ddd : abc.ddd.hij.entry2
dd*entry : abc.ddd.hij.entry2
val : hij.some.value.entry
這裏是我使用過濾列表的代碼:
regex = re.compile(r"{0}".format(entry_value), re.IGNORECASE)
display_list = list(filter(regex.search, display_list))
現實生活裏st包含〜300K字符串的條目(每條最多100個字符),考慮到GUI響應時間,以上的性能非常差。 我已經對我的真實測試案例進行了剖析,並且它爲輸入中的每個鍵輸入產生〜0.8s。
有沒有更快的方法?
感謝 - 優秀的提示 - 我將我的內存數據庫移至sqlite3 - 過濾時間降至100ms以下(x8優化)。至於列表框本身,這已經被優化了(我只顯示過濾列表的一小部分,並讓用戶瀏覽它...) – NirMH