返回列表中的数字,其总和是给定目标

时间:2015-11-26 10:08:24

标签: python performance list

input = x[1,2,4,6,3,9]
target = 6

O / P: 第一个数字是1,第二个数字是5

我遇到了这个问题,我用这段代码解决了这个问题:

def search(a,b):
    for d in b:
        if a==d:
            m=True
            break
        else:
            m=False
    return m

x=[1,4,5,7,9,6,2]
target=int(raw_input("Enter the number:"))
for i in x:
    if i<target:
        pair=int(target)-int(i)
        in2=search(pair,x)
        if in2==True:
            print "the first number= %d the second number %d"%(i,pair)
            break

如何更好地或以更有效的方式做到这一点?

3 个答案:

答案 0 :(得分:1)

我的想法如下:

x = [1, 4, 5, 7, 9, 6, 2]
target = int(raw_input("Enter the number:"))
for i in xrange(len(x)):
    for ii in xrange(len(x)):
        if (x[i] + x[ii]) == target:
            print "the first number= %d the second number %d" % (x[i], x[ii])

基本上我遍历循环两次搜索一个案例,其中第一个索引+其他索引等于你的目标数,然后是第二个索引,依此类推。我希望我有所帮助。您可以在打印后添加quit()以在第一次找到匹配后退出。祝你好运!

答案 1 :(得分:0)

与Damian的答案相同,但是使用了itertools

import itertools
x=[1, 4, 5, 7, 9, 6, 2]
target=6
for l in itertools.combinations(x,2):
    if l[0]+l[1]==target:
         print("the first number= %d the second number %d" % l)

如果x中的元素严格为正,则在创建组合之前,应删除大于或等于目标的所有元素。

答案 2 :(得分:0)

您可以获得与所需目标相加的数字的对列表:

>>> [(x,y) for x in [1,2,3] for y in [1,2,3] if x+y == 3]
[(1, 2), (2, 1)]

通用的是:

>>> [(x,y) for x in lst for y in lst if x+y == target]

如果你只需要没有对的数字

>>> set([x for x in lst for y in lst if x+y == target])

这可能不是最有效的方式,但它是一种pythonic方式并且可以工作。