循环重置列表异常:Python提取comments中tfidf匹配词问题排查
按句子提取匹配词并分列表存储的代码修正
问题根源
原代码的问题出在两个地方:
lis2在循环外面初始化,所有句子的匹配词都堆进同一个列表,没法按句子拆分- 把
lis2加入lis1的操作放在了整个循环结束后,只执行一次,最后所有结果都挤在一个子列表里
修正后的代码
lis1 = [] for cm in comments: lis2 = [] # 每处理一个句子就重置lis2 sp = cm.split() for s in sp: # 直接判断词是否在tfidf列表里,比嵌套循环更简洁高效 if s in tfidf: lis2.append(s) lis1.append(lis2) # 处理完当前句子就把结果存入lis1 print(lis1) data = pd.DataFrame(lis1)
关键改动说明
- 重置lis2的时机:把
lis2 = []移到外层循环内部,保证每个句子都从空列表开始收集匹配词 - 及时存入结果:将
lis1.append(lis2)放到外层循环里,每处理完一个句子就立即把该句子的匹配词列表加入lis1 - 优化匹配逻辑:原代码用嵌套循环遍历tfidf做匹配,改成直接用
s in tfidf更简洁。如果tfidf数据量较大,建议转成集合tfidf_set = set(tfidf),这样判断成员的效率会从O(n)提升到O(1)
内容的提问来源于stack exchange,提问作者MASTERWM
相关产品推荐
相关产品推荐

