python - 检查字符串是否包含列表中单词的最清晰、Pythonic、可靠和最快的方法
问题描述
我正在寻找最清晰、Pythonic 和最快的方法来检查字符串是否包含列表中的单词
这是我到目前为止想出的
introStrings = ['introduction:' , 'case:' , 'introduction' , 'case' ]
backgroundStrins = ['literature:' , 'background:', 'Related:' , 'literature' , 'background', 'related' ]
methodStrings = [ 'methods:' , 'method:', 'techniques:', 'methodology:' , 'methods' , 'method', 'techniques', 'methodology' ]
resultStrings = [ 'results:', 'result:', 'experimental:', 'experiments:', 'experiment:', 'results', 'result', 'experimental', 'experiments', 'experiment']
discussioStrings = [ 'discussion:' , 'Limitations:' , 'discussion' , 'limitations']
conclusionStrings = ['conclusion:' , 'conclusions:', 'concluding:' , 'conclusion' , 'conclusions', 'concluding' ]
allStrings = [ introStrings, backgroundStrins, methodStrings, resultStrings, discussioStrings, conclusionStrings ]
testtt = 'this may thod be in techniques ever material and methods'
for item in allStrings:
for word in testtt.split():
if word in item:
print('yes')
break
这段代码非常适合所有组合。这是一个嵌套的 for 循环。乍一看还不太清楚。
我想知道是否有更好的方法。
解决方案
any()
与链表理解一起使用会更加 Pythonic :
print any(word in sublist for word in testtt.split() for sublist in allStrings)
然而,这只会返回真/假;它不会识别在哪个子列表中找到了哪个单词。您可以使用此列表理解打印特定匹配项:
print [(word,sublist) for word in testtt.split() for sublist in allStrings if word in sublist]
testtt.split()
通过多次计算,您的代码有点浪费。
推荐阅读
- transformer - 无法 pip install -U sentence-transformers
- javascript - 如何使用 Restify 提供 css 文件
- node.js - Firebase 使用 Socket.IO 从客户端安全地向服务器发送请求?
- python - 使用请求登录网站时,如何找到有效负载所需的参数?
- git - 应该提交 .last_build_id 吗?
- javascript - 使用 2 个或更多休息响应来调用另一个休息服务并制作一个列表
- php - 返回空描述 simplexml_load_file() php
- authentication - SSO 应该包括授权还是仅包括身份验证?
- python - 将电子邮件地址和预定小时数作为输入并从字典中返回剩余小时数的函数
- c# - 创建按钮数组