You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现追加前检查单词是否在列表中的脚本问题求助

问题分析与解决思路

你的代码里有几个关键错误,导致功能没实现,逐个拆解:

  1. 每次循环覆盖了列表内容:你在for i in object:里写了lst = i.rstrip().split(),这会把之前lst里存的所有单词都清空,换成当前行的单词列表,完全保留不住之前的结果。
  2. 操作对象错误:你检查的是整行内容i是否在当前行的单词列表里,而不是遍历每个单词去检查。
  3. append的使用错误:lst.append()方法是无返回值的,你把它赋值给lst会让lst变成None,之后再操作就会报错。
  4. 逻辑判断写法错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:50:29