python - 如何有效地检查一个字符串是否包含来自两个列表的至少一个元素
问题描述
我有两个列表和一个句子列表,如下所示。
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中有没有有效的方法来做到这一点?
如果需要,我很乐意提供更多详细信息。
解决方案
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)
推荐阅读
- debugging - 可以在 VCode 的调试控制台中自动评估吗?
- excel - Excel:计算单元格范围内的字符串出现次数
- html - 如何在固定元素内添加空格?
- deep-learning - gym.spaces.box 观察状态理解
- reactjs - 与 React / Typescript 性能相关的可变范围的最佳实践是什么?
- python - Script to wait till a specified time
- flutter - 使用 MobX 在 Flutter 中处理关系数据
- rest - REST API - 更新实体之间的关系
- r - 在R中组合直方图条
- mips - 有没有办法将整数转换为数组(即 45 -> array[0] = 5 ; array [1] = 4)?