首页 > 解决方案 > 检查字符串是否包含列表中单词的最清晰、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 循环。乍一看还不太清楚。

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

标签: python

解决方案


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()通过多次计算,您的代码有点浪费。


推荐阅读