[問題] 關鍵字

看板Python作者 (lele)時間4年前 (2020/11/30 16:10), 編輯推噓13(13019)
留言32則, 7人參與, 4年前最新討論串1/2 (看更多)
我有大約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

11/30 16:22, 4年前 , 1F
把關鍵字加到set 然後判斷是不是in set
11/30 16:22, 1F

11/30 16:23, 4年前 , 2F
樓上 他應該是想要判斷 set 有沒有出現在 text 中
11/30 16:23, 2F

11/30 16:24, 4年前 , 3F
修正一下in set 我的意思是將set的元素依序取出
11/30 16:24, 3F

11/30 16:24, 4年前 , 4F
判斷是否有在set
11/30 16:24, 4F

11/30 16:24, 4年前 , 5F
抱歉表達錯誤
11/30 16:24, 5F

11/30 16:26, 4年前 , 6F
for item in set: if item in text ....
11/30 16:26, 6F

11/30 16:27, 4年前 , 7F
any
11/30 16:27, 7F

11/30 16:29, 4年前 , 8F

11/30 16:29, 4年前 , 9F
推樓上 any更精簡
11/30 16:29, 9F

11/30 16:31, 4年前 , 10F
推 any ,keyword 可以用 set 或 list
11/30 16:31, 10F

11/30 16:46, 4年前 , 11F
不過 any 的寫法會先組出 generator 再判斷
11/30 16:46, 11F

11/30 16:46, 4年前 , 12F
各位大大,抱歉,手機臨時發文,語意不精確,原來any這麼方
11/30 16:46, 12F

11/30 16:46, 4年前 , 13F
便,謝謝!
11/30 16:46, 13F

11/30 16:50, 4年前 , 14F
啊我錯了... 他不會先組出來才對
11/30 16:50, 14F

11/30 16:50, 4年前 , 15F
應該說 generator 每取一次才產生一個
11/30 16:50, 15F

11/30 17:03, 4年前 , 16F
https://bit.ly/2JoXzaP 這是我測試的結果
11/30 17:03, 16F

11/30 17:25, 4年前 , 17F
any參數必須是iterable 所以只是從container取出資料
11/30 17:25, 17F

11/30 17:27, 4年前 , 18F
然後看判斷式True or False 如果True就馬上返回True
11/30 17:27, 18F

11/30 17:28, 4年前 , 19F
如果遍歷完容器都沒返回就返回False
11/30 17:28, 19F

11/30 17:28, 4年前 , 20F
s大說的沒錯 我就是要確認他會不會看到 True 就結束
11/30 17:28, 20F

11/30 17:28, 4年前 , 21F
答案是會
11/30 17:28, 21F

11/30 17:29, 4年前 , 22F
其實any的概念就是or; all的概念就是and
11/30 17:29, 22F

11/30 17:33, 4年前 , 23F
因為any/or 就是有一個條件(或元素)是True就好
11/30 17:33, 23F

11/30 17:34, 4年前 , 24F
2個3個或更多是不會影響結果 這也是效能考量
11/30 17:34, 24F

11/30 18:03, 4年前 , 25F
主要就是要注意看它是否為Short-circuit,有的時候其實我
11/30 18:03, 25F

11/30 18:04, 4年前 , 26F
們會期待每一項都執行到就不能用Short-circuit evaluation
11/30 18:04, 26F

12/01 09:07, 4年前 , 27F
if re.search(r'a|b|c', text, re.I):
12/01 09:07, 27F

12/01 09:20, 4年前 , 28F
提供 re 的做法w 如果要用在迴圈裡面 把
12/01 09:20, 28F

12/01 09:20, 4年前 , 29F
match = re.compile(r'a|b|c', re.I) 放在迴圈外
12/01 09:20, 29F

12/01 09:20, 4年前 , 30F
if match.search(text): 這樣可以避免重複產生object
12/01 09:20, 30F

12/01 09:20, 4年前 , 31F
re.I 是 regex flag 忽略大小寫
12/01 09:20, 31F

12/01 11:34, 4年前 , 32F
用re的複雜度會比 or或any好, 自己手工的話用Trie
12/01 11:34, 32F
文章代碼(AID): #1VnAZtyD (Python)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
13
32
文章代碼(AID): #1VnAZtyD (Python)