Python中list.append迭代时重复添加元素问题求助
解决披头士成员列表重复添加问题
你的代码核心问题是每次输入新成员后,都会遍历整个new_list把所有元素重复追加到beatles里。比如:
- 第一次输入成员A,
new_list变成[A],此时遍历new_list把A加到beatles,没问题; - 第二次输入成员B,
new_list变成[A,B],这时又遍历new_list把A和B都加到beatles,导致A被重复添加一次; - 输入越多,前面的成员被重复添加的次数就越多。
下面是两种修复方案:
方案一:直接处理输入,实时去重
不需要额外维护new_list,直接判断输入的成员是否已存在,不存在再添加:
# step 1 beatles = ['John Lennon', 'Paul McCartney', 'George Harrison'] while True: new_member = input('Please enter new members to the group, enter NA to exit entering: ') if new_member == 'NA': break # 判断成员是否已存在,避免重复添加 if new_member not in beatles: beatles.append(new_member) else: print(f"{new_member} 已经是乐队成员了,不用重复加") print("Step 3:", beatles)
方案二:保留待添加列表,最后一次性合并
如果需要先收集所有新成员再合并,就把合并操作移到循环结束后,同时避免待添加列表里出现重复:
# step 1 beatles = ['John Lennon', 'Paul McCartney', 'George Harrison'] new_list = [] while True: new_member = input('Please enter new members to the group, enter NA to exit entering: ') if new_member == 'NA': break # 既不在原列表也不在待添加列表时,才加入待添加列表 if new_member not in beatles and new_member not in new_list: new_list.append(new_member) else: print(f"{new_member} 已经是成员或待添加成员了") # 退出循环后一次性合并到主列表 beatles.extend(new_list) print("Step 3:", beatles)
内容的提问来源于stack exchange,提问作者MING YANG
相关产品推荐
相关产品推荐

