如何用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,提问作者منى حشر العتيبي
相关产品推荐
相关产品推荐

