假设titleList有100w条数据,而L1、L2列表长度分别为1000,则该算法的时间复杂度为 O(1000000*1000)。
这种方法的时间复杂度要远远优于两个嵌套的for循环。
def getReturn(L1,L2,title):
'''
param1:
L1、L2分别为两个长度为1000的列表
func:
来一条数据(str型)title,判断title里是否含有的L1、L2里的元素
'''
# 设置flag初始值
flag1 = False
flag2 = False
# 循环遍历列表L1,时间复杂度O(1000)
for word1 in set(L1):
if word1 in title:
flag1= True
# 循环遍历列表L2,时间复杂度O(1000)
for word2 in set(L2):
if str(word2) in title:
flag2=True
# 判断title中同时含有列表L1、L2中的元素
if flag1==True and flag2==True:
return "level1"
# 判断title中同时含有列表L1但是不含有L2中的元素
elif flag1==True and flag2==False:
return "level2"
# 其它情况
else:
return "no"
# 多条数据列表titleList
# for title in titleList:
# print(title,getReturn(pwList,keyWordList,title))
df_data["label"] = df_data["title"].apply(lambda title: getReturn(pwList,keyWordList,title))
df_data