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