作者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/cn.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