Python嵌套分词列表移除停用词:避免误删整个子列表
解决停用词过滤问题:移除子列表内的停用词而非整个子列表
我明白你的问题啦——你现在的代码是把整个包含停用词的子列表都删掉,但你真正想要的是在每个子列表里单独移除那些属于停用词的元素,对吧?
问题根源
你当前的列表推导式[subl for subl in mylist if subl[1] not in stop_words]是在筛选整个子列表:它检查每个子列表的第二个元素是否在停用词里,只要符合条件就把整个子列表排除。这就是为什么第一个子列表被完全删掉的原因。
正确解决方案
我们需要用嵌套的列表推导式:外层遍历原列表里的每个子列表,内层遍历子列表中的每个元素,只保留不在停用词列表里的元素。这样就能实现“在每个子列表内移除停用词”的效果。
完整代码示例
# 原始列表 a = ['huey', 'duey', 'luey'] b = ['red', 'blue', 'green', 'gold'] first_list = [a, b] # 停用词列表 stop_words = ['huey', 'duey'] # 嵌套列表推导式处理每个子列表 second_list = [[word for word in subl if word not in stop_words] for subl in first_list] print(second_list)
输出结果
[['luey'], ['red', 'blue', 'green', 'gold']]
优化建议(处理大数据量时)
如果你的停用词数量很多,或者要处理的列表规模很大,建议把停用词列表转换成集合,因为集合的成员判断操作(in)效率更高(时间复杂度O(1),而列表是O(n)):
stop_words_set = set(stop_words) second_list = [[word for word in subl if word not in stop_words_set] for subl in first_list]
内容的提问来源于stack exchange,提问作者ARH
相关产品推荐
相关产品推荐

