Python技术问询:如何仅向列表添加未存在的字符串,避免重复
修正你的代码并实现需求
先指出你写的store函数里的几个关键问题:
- 函数开头把传入的列表直接赋值为空列表
[],等于每次调用都丢弃了原有列表,完全没法累积数据。 - 判断逻辑搞反了:应该是单词不在列表里时才添加,你写的是
if word in list才执行添加操作,正好相反。 list.append(word)没有返回值,不能赋值给list,否则list会变成None,后续操作会报错。list += word会把字符串拆成单个字符塞进列表,比如输入"cat"会变成['c','a','t'],这不是你要的效果,应该用append或者list += [word]。
修正后的store函数
def store(word_list, word): # 判断单词是否不在列表中,是则追加 if word not in word_list: word_list.append(word) # 列表是可变对象,修改后外部会同步,这里返回列表是为了方便后续操作 return word_list
完整实现需求的程序
让用户输入5个单词,去重后输出:
def store(word_list, word): if word not in word_list: word_list.append(word) return word_list # 初始化空列表用于存储不重复单词 unique_words = [] # 循环5次获取用户输入 for _ in range(5): user_input = input("请输入一个单词:") store(unique_words, user_input) # 输出最终结果 print("去重后的单词列表:", unique_words)
更简洁的写法(无需单独写函数)
如果不需要单独封装函数,直接在循环里处理即可:
unique_words = [] for _ in range(5): word = input("请输入一个单词:") if word not in unique_words: unique_words.append(word) print("去重后的单词列表:", unique_words)
补充:用集合实现更高效的去重
如果不需要保持输入顺序,用集合(set)判断元素是否存在的效率更高,适合处理大量数据:
unique_words = set() for _ in range(5): word = input("请输入一个单词:") unique_words.add(word) # 转成列表保持输出格式 print("去重后的单词列表:", list(unique_words))
内容的提问来源于stack exchange,提问作者o0pink0o
相关产品推荐
相关产品推荐

