鉴于这3个数据列表和关键字列表:
good_data1 = ['hello, world', 'hey, world']
good_data2 = ['hey, man', 'whats up']
bad_data = ['hi, earth', 'sup, planet']
keywords = ['world', 'he']
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个简单的函数来检查是否存在任何关键字作为数据列表中任何单词的子字符串.它应该为good_data列表返回True,为False 返回False bad_data.
我知道如何以一种效率低下的方式做到这一点:
def checkData(data):
for s in data:
for k in keywords:
if k in s:
return True
return False
Run Code Online (Sandbox Code Playgroud)
S.L*_*ott 38
你在找吗?
any( k in s for k in keywords )
Run Code Online (Sandbox Code Playgroud)
它更紧凑,但效率可能更低.
gnu*_*nud 17
在你的例子中,只有很少的项目,这并不重要.但如果您有几千个项目的列表,这可能会有所帮助.
由于您不关心列表中的哪个元素包含关键字,因此您可以扫描整个列表(作为一个字符串),而不是一次扫描一个项目.为此,您需要一个您知道在关键字中不会出现的连接字符,以避免误报.我在这个例子中使用换行符.
def check_data(data):
s = "\n".join(data);
for k in keywords:
if k in s:
return True
return False
Run Code Online (Sandbox Code Playgroud)
在我完全不科学的测试中,我的版本在大约30秒内检查了5000个项目的列表100000次.我在3分钟后停止了你的版本 - 厌倦了等待发布=)
| 归档时间: |
|
| 查看次数: |
34998 次 |
| 最近记录: |