Python运行代码列表重复打印两次的问题排查
两数之和代码输出异常排查
你贴出的代码片段本身仅包含1次print(Output)语句,正常单次执行只会输出一次结果。如果出现两次打印,优先排查三类环境问题:
- 运行环境开启了自动重载,代码被触发执行了两次
- 你贴出的片段之外,代码文件其他位置残留了额外的
print语句 - 交互式运行环境(如Jupyter、Python命令行)保留了历史运行结果,第一次输出是旧版本代码的运行结果,第二次才是当前代码的输出
代码本身的逻辑缺陷
即便解决重复打印问题,当前代码逻辑在部分场景下会输出错误结果,核心问题有两个:
- 未排除自身匹配的情况:当遍历到的元素值恰好等于
target - nums[i](即元素值*2=target)时,代码会将当前元素自身的索引加入结果,导致同一个索引被重复计算。例如nums=[3,4]、target=6时,遍历到索引0的3时,计算得到补数为3,会直接把索引0加入结果,最终输出错误值。 - 重复元素场景下索引取值错误:
list.index()方法只会返回匹配值第一次出现的索引,当列表存在重复值时会取错位置。例如nums=[3,3]、target=6时,遍历到索引1的3时,nums.index(3)永远返回0,最终输出错误的[0,0]而非正确的[0,1]。
修正后代码
用哈希表存储已经遍历过的元素和对应索引,从根源避免上述两个问题,时间复杂度也从O(n²)优化到O(n):
nums = [2,7,15,11] target = 18 result = [] num_index_map = {} for idx, num in enumerate(nums): complement = target - num if complement in num_index_map: result = [num_index_map[complement], idx] break num_index_map[num] = idx print(result)
运行后将稳定输出正确结果[1, 3],不会出现重复打印、结果错误的问题。
内容的提问来源于stack exchange,提问作者gagan
相关产品推荐
相关产品推荐

