首页 > 解决方案 > 如何有效地检查一个字符串是否包含来自两个列表的至少一个元素

问题描述

我有两个列表和一个句子列表,如下所示。

list1 = ['data mining', 'data sources', 'data']
list2 = ['neural networks', 'deep learning', 'machine learning']

sentences = ["mining data using neural networks has become a trend", "data mining is easy with python", "machine learning is my favorite", "data mining and machine learning are awesome", "data sources and data can been used for deep learning purposes", "data, deep learning and neural networks"]

我想从list1和中选择包含元素的句子list2。即输出应该是;

["mining data using neural networks has become a trend", "data mining and machine learning are awesome", "data sources and data can been used for deep learning purposes", "data, deep learning and neural networks"]

我当前的代码如下。

for sentence in sentences:
    for terms in list1:
        for words in list2:
           if terms in sentence:
               if words in sentence:
                     print(sentence)

但是,代码是 O(n^3),效率不高。在python中有没有有效的方法来做到这一点?

如果需要,我很乐意提供更多详细信息。

标签: python

解决方案


all您可以利用和的短路来any提高性能:

list1 = ['data mining', 'data sources', 'data']
list2 = ['neural networks', 'deep learning', 'machine learning']
sentences = ["mining data using neural networks has become a trend", "data mining is easy with python", "machine learning is my favorite", "data mining and machine learning are awesome", "data sources and data can been used for deep learning purposes", "data, deep learning and neural networks"]

for sentence in sentences:
    if all(any(term in sentence for term in lst) for lst in (list1, list2)):
        print(sentence)

推荐阅读