看板 Python 關於我們 聯絡資訊
我有大約30個關鍵字 本來用if ‘ok’ in text or ....... 請問有沒有什麼更好的方式嗎? 不然要 or 30次 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.11.39.69 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1606723831.A.F0D.html
s0914714: 把關鍵字加到set 然後判斷是不是in set 11/30 16:22
annheilong: 樓上 他應該是想要判斷 set 有沒有出現在 text 中 11/30 16:23
s0914714: 修正一下in set 我的意思是將set的元素依序取出 11/30 16:24
s0914714: 判斷是否有在set 11/30 16:24
s0914714: 抱歉表達錯誤 11/30 16:24
s0914714: for item in set: if item in text .... 11/30 16:26
noworneverev: any 11/30 16:27
noworneverev: https://reurl.cc/v1OlN1 11/30 16:29
s0914714: 推樓上 any更精簡 11/30 16:29
annheilong: 推 any ,keyword 可以用 set 或 list 11/30 16:31
annheilong: 不過 any 的寫法會先組出 generator 再判斷 11/30 16:46
legov: 各位大大,抱歉,手機臨時發文,語意不精確,原來any這麼方 11/30 16:46
legov: 便,謝謝! 11/30 16:46
annheilong: 啊我錯了... 他不會先組出來才對 11/30 16:50
annheilong: 應該說 generator 每取一次才產生一個 11/30 16:50
annheilong: https://bit.ly/2JoXzaP 這是我測試的結果 11/30 17:03
s0914714: any參數必須是iterable 所以只是從container取出資料 11/30 17:25
s0914714: 然後看判斷式True or False 如果True就馬上返回True 11/30 17:27
s0914714: 如果遍歷完容器都沒返回就返回False 11/30 17:28
annheilong: s大說的沒錯 我就是要確認他會不會看到 True 就結束 11/30 17:28
annheilong: 答案是會 11/30 17:28
s0914714: 其實any的概念就是or; all的概念就是and 11/30 17:29
s0914714: 因為any/or 就是有一個條件(或元素)是True就好 11/30 17:33
s0914714: 2個3個或更多是不會影響結果 這也是效能考量 11/30 17:34
ddavid: 主要就是要注意看它是否為Short-circuit,有的時候其實我 11/30 18:03
ddavid: 們會期待每一項都執行到就不能用Short-circuit evaluation 11/30 18:04
chickengod: if re.search(r'a|b|c', text, re.I): 12/01 09:07
chickengod: 提供 re 的做法w 如果要用在迴圈裡面 把 12/01 09:20
chickengod: match = re.compile(r'a|b|c', re.I) 放在迴圈外 12/01 09:20
chickengod: if match.search(text): 這樣可以避免重複產生object 12/01 09:20
chickengod: re.I 是 regex flag 忽略大小寫 12/01 09:20
Yshuan: 用re的複雜度會比 or或any好, 自己手工的話用Trie 12/01 11:34