Python容器移除整数异常:部分用例结果不符求助
整数集合操作的REMOVE功能异常排查
问题背景
这段代码旨在实现整数的添加、存在检查与移除功能,返回对应操作结果。目前ADD和EXISTS功能正常,但REMOVE功能在部分测试用例中结果异常。
原代码
def solution(queries): container = set() results = [] for query in queries: operation, value = query if operation == "ADD": container.add(int(value)) results.append("") elif operation == "REMOVE": removed_value = int(value) if removed_value in container: container.remove(removed_value) results.append("true") else: results.append("false") elif operation == "EXISTS": if int(value) in container: results.append("true") else: results.append("false") return results
测试用例对比
第一组测试用例(结果符合预期)
查询列表:
[["ADD","2"], ["ADD","3"], ["ADD","9"], ["REMOVE","10"], ["REMOVE","5"], ["REMOVE","5"], ["REMOVE","9"], ["REMOVE","2"], ["REMOVE","2"], ["REMOVE","9"], ["EXISTS","10"], ["EXISTS","2"], ["EXISTS","3"], ["EXISTS","9"], ["ADD","10"], ["EXISTS","10"]]
输出结果:
["", "", "", "false", "false", "false", "true", "true", "false", "false", "false", "false", "true", "false", "", "true"]
第二组测试用例(结果不符)
查询列表:
[["ADD","0"], ["ADD","1"], ["ADD","2"], ["REMOVE","1"], ["ADD","0"], ["ADD","1"], ["ADD","2"], ["ADD","1"], ["REMOVE","2"], ["EXISTS","2"], ["REMOVE","2"], ["EXISTS","2"], ["REMOVE","2"], ["REMOVE","1"], ["EXISTS","1"], ["REMOVE","1"], ["EXISTS","1"], ["REMOVE","1"], ["EXISTS","1"], ["REMOVE","1"], ["REMOVE","0"], ["EXISTS","0"], ["REMOVE","0"], ["EXISTS","0"], ["REMOVE","0"], ["ADD","0"], ["EXISTS","0"]]
- 预期结果:
["", "", "", "true", "", "", "", "", "true", "true", "true", "false", "false", "true", "true", "true", "false", "false", "false", "false", "true", "true", "true", "false", "false", "", "true"]
- 实际结果:
["", "", "", "true", "", "", "", "", "true", "false", "false", "false", "false", "true", "false", "false", "false", "false", "false", "false", "true", "false", "false", "false", "false", "", "true"]
问题原因
核心问题在于代码使用了**set作为存储容器,而set的特性是不允许重复元素**。当执行多次ADD同一个值时,set只会保留一个实例,这就导致后续的REMOVE操作无法处理“重复添加同一元素需要多次移除”的场景。
比如第二组用例中:
- 连续执行
["ADD","1"]两次,set里只会有一个1 - 第一次
REMOVE("1")后,set里的1已经被删除,后续的REMOVE("1")都会返回false,但预期结果中需要多次返回true,这就和实际行为产生了冲突。
修复方案
方案1:使用列表实现(直观处理重复元素)
def solution(queries): container = [] results = [] for query in queries: operation, value = query val = int(value) if operation == "ADD": container.append(val) results.append("") elif operation == "REMOVE": if val in container: container.remove(val) results.append("true") else: results.append("false") elif operation == "EXISTS": results.append("true" if val in container else "false") return results
方案2:使用Counter统计次数(更高效)
from collections import Counter def solution(queries): container = Counter() results = [] for query in queries: operation, value = query val = int(value) if operation == "ADD": container[val] += 1 results.append("") elif operation == "REMOVE": if container[val] > 0: container[val] -= 1 results.append("true") else: results.append("false") elif operation == "EXISTS": results.append("true" if container[val] > 0 else "false") return results
这两个方案都能正确处理重复元素的添加和移除,匹配第二组测试用例的预期结果。
内容的提问来源于stack exchange,提问作者Curious User
相关产品推荐
相关产品推荐

