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
如何更好地或以更有效的方式做到这一点?
答案 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方式并且可以工作。