【问题标题】:How to find pair of numbers in a list which makes a sum as given number如何在列表中找到一对数字,其总和为给定数字
【发布时间】:2020-02-14 10:13:26
【问题描述】:

几天前我遇到了一个问题,它说有一个数字列表和一个名为 total 的值。现在我们需要编写一个程序,给出一个元组列表(元组中只有 2 个元素),每个元组的总和应该等于 total 的值。示例:以下是输入:

input = [1,2,3,4,6,7,8,9] 
total = 10

以下是输出:

output = [(1,9), (2,8), (3,7), (4,6)]

【问题讨论】:

    标签: python python-3.x list tuples combinations


    【解决方案1】:

    使用itertools.combinations 的列表理解:

    >>> import itertools
    >>> inpt = [1,2,3,4,6,7,8,9]
    >>> total = 10
    >>> [p for p in itertools.combinations(inpt, 2) if sum(p) == total]
    [(1, 9), (2, 8), (3, 7), (4, 6)]
    

    请注意,您不应使用 input 作为变量名,因为它会影响内置的 input() 函数。

    要在没有itertools 的情况下执行此操作,我们可以使用以下列表理解:

    >>> [(inpt[i],inpt[j]) for i in range(len(inpt)) for j in range(i+1, len(inpt)) if sum((inpt[i],inpt[j])) == total]
    >>> [(1, 9), (2, 8), (3, 7), (4, 6)]
    

    【讨论】:

      【解决方案2】:

      您可以找到差异并检查该值是否是剩余列表的一部分,如下所示 -

      >>> [(index,i) for index,i in enumerate(input)] #how enumerate works
      [(0, 1), (1, 2), (2, 3), (3, 4), (4, 6), (5, 7), (6, 8), (7, 9)]
      >>> [(i,total-i) for index,i in enumerate(input) if (total-i) in input[index+1:]]
      [(1, 9), (2, 8), (3, 7), (4, 6)]
      

      【讨论】:

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