我有两个列表: list message
和list keyword
。List message
如下所示:
message = ["my name is blabla",'x-men is a good movie','i deny that fact']
keyword = ['x-men','name is','psycho movie']
我想创建一个新的列表,其中包含消息中存在的关键字。
newList = []
for message_index in message:
print(newList)
for keyword in keywords:
if search(r'\b{}\b'.format(keyword), message_index):
newList.append(keyword)
我的python代码在上面,问题是我的消息列表中的每个句子大约有100到150个单词,列表的长度是3000。每个关键字可能是一个或两个单词,列表长度为12,000。
所以搜索需要很长时间,有没有更短的方法呢?
这个问题是不同的,因为两个列表中都有大量的数据。
发布于 2017-11-01 13:14:26
使用内置的函数:
要按简单事件搜索,请执行以下操作:
message = ["my name is blabla",'x-men is a good movie','i deny that fact']
keyword = ['x-men','name is','psycho movie']
result = [k for k in keyword if any(k in m for m in message)]
print(result)
输出:
['x-men', 'name is']
-
如果您需要按exact words进行搜索:
import re
message = ["my name is blabla",'x-men is a good movie','i deny that fact']
keyword = ['x-men','name is','psycho movie']
result = [k for k in keyword if any(re.search(r'\b{}\b'.format(k), m) for m in message)]
发布于 2017-11-01 16:06:26
通过将列表message
连接到分隔字符串中,然后搜索该字符串中的每个关键字,可以显著降低关键字搜索的复杂性:
>>> ms='\t'.join(message)
>>> [e for e in keyword if e in ms]
['x-men', 'name is']
同样的方法也适用于具有相同优点的正则表达式:
>>> [e for e in keyword if re.search(r'\b'+e+r'\b', ms)]
这降低了从O(M*N)
到O(N)
的复杂性...
发布于 2017-11-01 13:18:55
尝试使用嵌套列表理解
list = [key for key in keyword for word in message if key in word]
https://stackoverflow.com/questions/47055575
复制相似问题