首页 > 解决方案 > 如何找到总和为给定值的一对数字?

问题描述

我想编写一个函数,它接受一个不同的正整数列表和一个目标正整数值,然后返回一个整数对列表,其中每对总和为目标值。

这是我的代码,但它只显示一对数字:

def pairsum(list1, target):
  for i in range(len(list1) -1):
    for j in range(i + 1 ,len(list1)):
      if list1[i]+ list1[j] == target:
        return (list1[i], list1[j])

pairsum([3,2,6,1,5,4], 7)

当我调用pairsum([3,2,6,1,5,4], 7)输出时(3,4)应该是[(1,6), (2,5), (3,4)]. 结果应按每个元组中第一个元素的升序排列。我不允许进口任何东西

标签: pythonpython-3.x

解决方案


这是使用 itertools 的单行代码:

import itertools

def pairsum(vals, target):
    return sorted([(a, b) for a, b in itertools.combinations(vals, 2) if a + b == target])

解释:

  • itertools.combinations(vals, 2)创建所有 2 元素组合
  • “如果”部分将它们过滤成总和为目标的组合
  • 接受的组合被组合成一个最终排序的元组列表(按每个元组的第一个元素)

推荐阅读