当两个字符串都存储在python的列表中时,如何检查字符串是否包含子字符串?

时间:2019-03-10 08:46:57

标签: python string pandas textblob

我的主字符串在数据框中,子字符串存储在列表中。我想要的输出是找到匹配的子字符串。这是我正在使用的代码。

removeRoles

这给我的结果是不是实际匹配的字符串。输出应为“节段切除术”。但是我得到了[0,'lobectomy']。请帮忙!!。我试图从这里发布的答案中寻求帮助。 Check if multiple strings exist in another string请帮助找出我做错了什么?

2 个答案:

答案 0 :(得分:1)

我并不是真的使用TextBlob,但是我有两种方法可以帮助您实现目标。本质上,我将句子分隔为空格,然后反复进行迭代以查看是否有匹配项。一种方法返回一个列表,另一种返回索引值和单词的字典。

### If you just want a list of words
def find_keyword_matches(sentence, keyword_list):
    s1 = sentence.split(' ')
    return [i for i in  s1 if i in keyword_list]

然后:

find_keyword_matches(sentence2, comorbidity_keywords)

输出:

['segmentectomy']

对于字典:

def find_keyword_matches(sentence, keyword_list):
    s1 = sentence.split(' ')
    return {xyz.index(i):i for i in xyz if i in comorbidity_keywords}

输出:

{17: 'segmentectomy'}

最后,是一个迭代器,如果有的话,该迭代器还将打印在句子中找到单词的位置:

def word_range(sentence, keyword):
    try:
        idx_start = sentence.index(keyword)
        idx_end = idx_start + len(keyword)
        print(f'Word \'{keyword}\' found within index range {idx_start} to {idx_end}')
        if idx_start > 0:
            return keyword
    except ValueError:
        pass

然后执行嵌套列表理解以摆脱None值:

found_words = [x for x in [word_range(sentence2, i) for i in comorbidity_keywords] if not x is None]

答案 1 :(得分:0)

应该有一些更有效的方法来做到这一点。但这就是我为两个列表使用两个for循环的想法。

for ckeyword in comorbidity_keywords:
   for keyword in df1.values.tolist():
     if any(ckeyword in key for key in keyword):
        matches.append(ckeyword)