如何有效地检查字符串是否包含两个列表中的至少一个元素-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何有效地检查字符串是否包含两个列表中的至少一个元素

2019-01-22 17:30:27 1694 1

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

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中这样做?

取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:22

    您可以利用短路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)
    

    集合比列表更有效。如果要查找包含两个列表中单个单词的句子,您可以&使用两个“列表” 检查每个句子的intersection(),而不是使用嵌套循环:

    list1 = set(list1)
    list2 = set(list2)
    [sentence for sentence in set(sentences.split()) if sentence & list1 & list2]
    但是,由于您的列表似乎包含短语(或单词序列),因此可能很难避免使用多个循环。如果找到或找不到匹配项,您至少可以中断或继续循环。也没有必要在彼此之间嵌套您要匹配的两个列表的循环。

    result = []
    for sentence in sentences:

    for word in list1:
        if word in sentence:
            break
    else:
        continue
    for word in list2:
        if word in sentence:
            break
    else:
        continue
    result.append(sentence)

    结果:

    ['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']

    0 0
相关问答

0

回答

MaxCompute中的UDF函数是不是不能进行http请求

2022-08-16 18:11:16 111浏览量 回答数 0

1

回答

数据的集中趋势中的测量测度主要包含哪些呢?

2022-07-31 18:23:56 161浏览量 回答数 1

1

回答

如何使用字符数组、字符串构造一个String呢?

2022-04-03 23:42:37 276浏览量 回答数 1

1

回答

用 if(!strcmp(s1, s2)) 比较两个字符串等值,是否是个好风格?

2022-03-29 22:09:39 201浏览量 回答数 1

1

回答

如何测试断言两个字典列表(字典项包含一个列表)是否相同

2020-03-23 20:59:05 349浏览量 回答数 1

1

回答

我如何声明一个二维字符串数组?

2020-02-08 19:54:00 175浏览量 回答数 1

1

回答

如何将字符串添加到string []数组?没有.Add功能

2020-01-16 16:31:44 402浏览量 回答数 1

0

回答

禁用android时,多个Windows事件不起作用:resizeableActivity =“ f

2019-12-19 17:02:37 934浏览量 回答数 0

2

回答

检查字符串是否包含除给定字符串python中的字符之外的字符

2019-09-14 21:45:22 459浏览量 回答数 2

1

回答

对一个TCP连接执行write或send函数,当函数成功返回时,是否意味着数据已经成功被对方接收?

2016-06-15 10:53:56 2247浏览量 回答数 1
47
文章
723
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载