[问题] 关键字

楼主: 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