我有一些文字,我想看看其中是否有与“软件相关”的术语。这是一个基本的实现:
def is_software_related(text):
TERMS = ['software', 'developer', 'java', 'ruby', 'python']
for term in TERMS:
if term in text.lower(): return True
return False
是否有一种更优雅的单层衬纸来做上述事情?
答案 0 :(得分:2)
生成器:
还有其他一些生成器解决方案,但这可能是最容易阅读的:
def is_software_related(text):
return any(term in text.lower() for term in ['software', 'developer', 'java', 'ruby', 'python'])
设置交叉点:
如果您只想匹配完整的单词,则可以设置一个交集(在文本中创建一组与软件相关的单词和另一组单词,并查看它们是否共享任何成员):
def is_software_related(text):
return bool({'software', 'developer', 'java', 'ruby', 'python'} & set(text.lower().split()))
尽管可以说,这比仅使用for循环更不易读,而且绝对不比生成器更易读。请注意,它产生的行为与使用in
的解决方案不同(因为in
将允许部分匹配,例如javanese
,而集合交集则不允许)。对于您的用例,这可能是更好的行为。
答案 1 :(得分:1)
您编写的内容可以用以下一句话来写:
def is_software_related(text):
return any(map(text.lower().__contains__, ('software', 'developer', 'java', 'ruby', 'python')))
答案 2 :(得分:1)
您可以使用any
在一行中完成该操作。
any(map(lambda x: x in text.lower(), TERMS))