我们如何有效地检查字符串列表是否包含来自另一个字符串列表的单词?

时间:2017-12-15 00:47:13

标签: python

假设我有一个诅咒词列表

curseword = ['fuxx', 'die', 'damn']

如果我正在遍历一个句子列表(字符串列表)来检查该句子是否包含诅咒词。

text = [ ['i','am','a','boy'] , [....] , [....] ]

我尝试做类似

的事情
for i in curse_words:
    for t in text:
        if i in t:
            // exsits

但似乎错误且效率低下。

我怎样才能有效地做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以将jQuery.ajax({ url: "https://www.aworkingapi.com", type: "GET", }, success: function(data){ $.each(data.content, function (index, item) { if (['en','or', 'de', 'ur', 'bn', 'ch'].some(original_language => item.original_language.includes(original_language))) { html += "<div class="customContent">"; html += "<div class='original_language'><span class='b'>Lan:</span> " + item.original_language + "</div>"; // more content }, dataType: 'json' } }) 转换为cursewords以提高查找效率,并使用列表理解,这比在较小的情况下更通用的循环更有效:

set

答案 1 :(得分:2)

curseword列表转换为集合,然后将用户set.intersection转换为检查句子中的字词是否与cursword重叠。

In [10]: curseword = {'fuxx', 'die', 'damn'}

In [11]: text = [ ['i','am','a','boy'], ['die']]

In [21]: new_text = [int(bool(curseword.intersection(sent))) for sent in text]

In [22]: new_text
Out[22]: [0, 1]

答案 2 :(得分:0)

正如你所说,你想要不同的东西:

  

您可以尝试不循环:

curseword = ['fuxx', 'die', 'damn']
text = [ ['i','am','a','damn','boy']]

print(list(filter(lambda z:z!=[None],map(lambda x:(list(map(lambda y:y if x in y else None,text))),curseword))))

输出:

[[['i', 'am', 'a', 'damn', 'boy']]]