[問題] 關鍵字

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

Links booklink

Contact Us: admin [ a t ] ucptt.com