首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最清晰、最可靠、最快捷的检查字符串是否包含列表中单词的方法

最清晰、最可靠、最快捷的检查字符串是否包含列表中单词的方法
EN

Stack Overflow用户
提问于 2019-06-21 21:58:57
回答 4查看 76关注 0票数 0

我正在寻找最清晰、最快捷的方法来检查字符串是否包含列表中的单词。

这就是我到目前为止想出来的

代码语言:javascript
复制
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循环。乍一看还不太清楚。

我想知道是否有更好的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-21 22:26:54

我能得到的是使用chainany

代码语言:javascript
复制
resultStrings = [
    "results:",
    "result:",
    "experimental:",
    "experiments:",
    "experiment:",
    "results",
    "result",
    "experimental",
    "experiments",
    "experiment",
]
conclusionStrings = [
    "conclusion:",
    "conclusions:",
    "concluding:",
    "conclusion",
    "conclusions",
    "concluding",
]

allStrings = [resultStrings, conclusionStrings]
testtt = "this may thod be in techniques ever material and methods"

from itertools import chain
string_set = set(chain(*allStrings))
any(i in string_set for i in testtt.split())

虽然set需要一定的空间,但它可以提高效率。谢谢彼得伍德.

票数 2
EN

Stack Overflow用户

发布于 2019-06-21 22:17:13

如果将any()与链式列表理解结合使用,则会更具有Pythonic风格:

代码语言:javascript
复制
print any(word in sublist for word in testtt.split() for sublist in allStrings)

但是,这只会返回true/false;它不会标识在哪个子列表中找到了哪个单词。您可以使用此列表理解打印特定的匹配:

代码语言:javascript
复制
print [(word,sublist) for word in testtt.split() for sublist in allStrings if word in sublist]

通过多次计算testtt.split(),您的代码有点浪费。

票数 3
EN

Stack Overflow用户

发布于 2019-06-21 22:22:07

我正在寻找最清晰、最快捷的方法来检查字符串是否包含列表中的单词。

首先,我会把名单弄平

代码语言:javascript
复制
all_strings = [*intro, *back, *methods, ...] # You get the idea

(或者,使用嵌套列表理解)

代码语言:javascript
复制
all_strings = [word for list in [intro, back, ...] for word in list] # if you're into that

接下来,拆分字符串:

代码语言:javascript
复制
string_words = a_string.split()

最后,只需查找单词:

代码语言:javascript
复制
found = [w for w in string_words if w in all_strings]

那是一种很重的电子琴,对速度和可靠性不太确定。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56710904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档