Python实现追加前检查单词是否在列表中的脚本问题求助
问题分析与解决思路
你的代码里有几个关键错误,导致功能没实现,逐个拆解:
- 每次循环覆盖了列表内容:你在
for i in object:里写了lst = i.rstrip().split(),这会把之前lst里存的所有单词都清空,换成当前行的单词列表,完全保留不住之前的结果。 - 操作对象错误:你检查的是整行内容
i是否在当前行的单词列表里,而不是遍历每个单词去检查。 append的使用错误:lst.append()方法是无返回值的,你把它赋值给lst会让lst变成None,之后再操作就会报错。- 逻辑判断写法错误:
if i in lst is True这种写法不符合Python语法,正确的判断应该是if 元素 in 列表,不需要加is True。
修正后的代码
file_name = input("Enter file name: ") lst = [] # 用with语句打开文件,自动处理关闭操作,更安全 with open(file_name, 'r') as file: for line in file: # 去除换行符,分割成单词列表 words = line.rstrip().split() # 遍历当前行的每个单词 for word in words: # 检查单词是否不在列表中,不在就追加 if word not in lst: lst.append(word) print(lst)
额外优化建议
如果你的文件很大,单词数量多,用列表的in操作效率会很低(每次检查都是线性遍历)。可以改用集合(set)来存储单词,集合的成员检查是O(1)时间复杂度,效率更高。最后如果需要列表格式,再转成列表:
file_name = input("Enter file name: ") word_set = set() with open(file_name, 'r') as file: for line in file: words = line.rstrip().split() for word in words: word_set.add(word) # 转成列表输出 lst = list(word_set) print(lst)
注意:集合是无序的,如果需要保持单词第一次出现的顺序,Python 3.7+的普通字典也可以实现(因为3.7+字典会保留插入顺序),不过日常场景用列表足够,数据量大再考虑集合优化。
内容的提问来源于stack exchange,提问作者Gerb
相关产品推荐
相关产品推荐

