Python统计列表A中和为12的非重复数对及代码问题排查
两数之和配对代码排查与修正
原代码核心问题
- 语法错误:
print()函数返回值为None,原代码在print语句末尾用+连接s.add(arr[i])操作,会直接触发TypeError,代码完全无法运行。 - 逻辑错位:原代码将集合添加元素的操作与print语句绑定,没有实现“每遍历一个元素就将其加入待匹配集合”的核心逻辑,导致集合始终为空,哪怕修正语法错误也无法触发配对判断。
- 重复冗余:未对已参与配对的元素做标记,会导致同一元素被反复匹配,生成大量无意义的重复数对。
修正后的实现方案
采用下标标记法,保留原数组元素的出现顺序,保证每个元素最多参与一次配对,从根源上避免重复输出:
def get_pairs(arr, target_sum): # 标记数组内每个位置的元素是否已参与配对 used = [False] * len(arr) pairs = [] for i in range(len(arr)): # 已配对的元素直接跳过 if used[i]: continue needed_val = target_sum - arr[i] # 查找i位置之后,第一个未被使用、值符合要求的元素 for j in range(i + 1, len(arr)): if not used[j] and arr[j] == needed_val: pairs.append([arr[i], arr[j]]) used[i] = True used[j] = True break return pairs A = [4, 8, 9, 0, 12, 1, 4, 2, 12, 12, 4, 4, 8, 11, 12, 0] target = 12 result = get_pairs(A, target) print(result)
运行结果
上述代码的输出为:
[[4, 8], [0, 12], [1, 11], [4, 8], [12, 0]]
共5个数对,与期望的数对集合完全匹配,仅存在元素排列顺序的微小差异,可根据需要调整数对内的元素顺序适配自定义输出要求。
内容的提问来源于stack exchange,提问作者robsson
相关产品推荐
相关产品推荐

