You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python找出列表中和为目标值的唯一数对?

找和为目标值的唯一数对:代码补全与优化

补全后的可运行代码

要解决数对重复的问题,关键是让数对以固定顺序存储(比如较小数在前,较大数在后),这样反向数对会被识别为同一元组,集合自动去重。补全后的代码如下:

def find_unique_pairs(numbers, target):
    seen = set()
    pairs = set()
    
    for num in numbers:
        complement = target - num
        if complement in seen:
            # 构造有序数对,避免重复
            pair = (min(num, complement), max(num, complement))
            pairs.add(pair)
        seen.add(num)
    
    return list(pairs)

# 示例测试
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
target = 10
print(find_unique_pairs(numbers, target))  # 输出: [(2, 8), (3, 7), (4, 6)]

大列表的效率优化建议

  • 提前去重输入数据:如果原列表存在大量重复数字,先转换为集合再转回列表,减少循环迭代次数:numbers = list(set(numbers))(注意会打乱原列表顺序,但不影响数对结果)。
  • 替换排序为直接比较:使用min()和max()构造有序数对,比sorted()的开销更低,适合超大规模数据集。
  • 保持O(n)时间复杂度:当前单循环+哈希集合的方案时间复杂度为O(n),远优于暴力双重循环的O(n²),不要改用低效的暴力解法。
  • 按需排除相同元素的数对:如果需要排除像(2,2)这类两个元素相同的数对,可以在添加时增加判断:if num != complement,避免不符合需求的数对被加入。

内容的提问来源于stack exchange,提问作者منى حشر العتيبي

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:38:26