【问题标题】:Find number of pairs that add up to a specific number from two different lists?从两个不同的列表中查找加起来为特定数字的对数?
【发布时间】:2020-06-06 03:09:44
【问题描述】:
a = [1,2,3,4,5,6,7]
b  = [56,59,62,65,67,69]


def sumOfTwo(a,b,v):
    for i in range (len(a)):
        val_needed = v - a[i]
        for j in range (len(b)):
            if b[j] == val_needed:
                x = b[j]
                y = a[i]             
    print(x,y) 

sumOfTwo(a,b,v=70)

输出:5 65

如果问题中的给定列表可能有更多对,我该怎么做? 帮助。 还有哪些方法可以实现这一目标?

【问题讨论】:

  • 这里打印出匹配的 last 对。如果要打印 所有 匹配的对,则需要在 for 循环中使用 print()
  • 感谢 Code.Apprentice。你很快。需要O(n^2),能不能降低时间复杂度?
  • 这与您最初提出的问题不同。我的第一个倾向可能不是。如果您知道两个输入列表都已排序,则可以减少常数因子。这将允许您在两个元素的总和大于目标时立即中断。

标签: python arrays list sum sum-of-digits


【解决方案1】:

如果您只想打印匹配的值,您只需将打印语句缩进到if 内,如下所述。此外,您应该对for 循环和变量赋值使用更pythonic 的方法。

a = [1,2,3,4,5,6,7]
b  = [56,59,62,65,67,69]


def sumOfTwo(a,b,v):
    for i in a:
        val_needed = v - i
        for j in b:
            if j == val_needed:
                x, y = j, i
                print(x,y)

sumOfTwo(a,b,v=70)

【讨论】:

    【解决方案2】:

    使用列表推导:

    a = [1,2,3,4,5,6,7]
    b = [56,59,62,65,67,69]
    
    c = [(x, y)
         for x in a
         for y in b
         if x + y == 70]
    
    print(c)
    

    这会产生

    [(1, 69), (3, 67), (5, 65)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多