Python 查找数组中与另一数组中的元素匹配的两个整数之和

Python 查找数组中与另一数组中的元素匹配的两个整数之和,python,Python,该函数接受两个数组arr1和arr2,将arr1中的任意两个整数的总和返回true到arr2中的任意元素。我尝试过这样做,但它给了我一个运行时错误 arr1[-1,8,3] arr2[3,7,2] 程序应重新运行true,因为arr2中的-1+3=2 2 def SumArray(arr1, arr2): # Write your code here myDictionary ={} ct=False el=arr2.pop() for i in rang

该函数接受两个数组arr1和arr2,将arr1中的任意两个整数的总和返回true到arr2中的任意元素。我尝试过这样做,但它给了我一个运行时错误

arr1[-1,8,3]

arr2[3,7,2]

程序应重新运行true,因为arr2中的-1+3=2 2

def SumArray(arr1, arr2):
    # Write your code here
    myDictionary ={}
    ct=False
    el=arr2.pop()
    for i in range(len(arr1)):
        if arr1[i] in myDictionary:
        # print(myDictionary[arr1[i],arr1[i]])
                ct=True
                return ct

        else:
                myDictionary[el-arr1[i]]= arr1[i]
                ct=False
                return ct

您可以执行以下类似操作:

for i in range(0, len(arr1)):
    for j in range(1, len(arr1)):
        if arr1[i] + arr1[j] in arr2:
            print("TRUE")
print("FALSE")

您可以执行以下类似操作:

for i in range(0, len(arr1)):
    for j in range(1, len(arr1)):
        if arr1[i] + arr1[j] in arr2:
            print("TRUE")
print("FALSE")

另一种方法是使用itertools:

import itertools
for x,y in itertools.combinations(arr1, 2):
    if x+y in arr2: 
        print("TRUE")
        break
else:
    print("FALSE")

另一种方法是使用itertools:

import itertools
for x,y in itertools.combinations(arr1, 2):
    if x+y in arr2: 
        print("TRUE")
        break
else:
    print("FALSE")

正如Blotosmetek所建议的:

import itertools    
arr1 = [1,2,3,4,5]
arr2 = [3,6]

res = any(filter(lambda x: x[0]+x[1] in arr2, itertools.combinations(arr1,2)))
print(res)

正如Blotosmetek所建议的:

import itertools    
arr1 = [1,2,3,4,5]
arr2 = [3,6]

res = any(filter(lambda x: x[0]+x[1] in arr2, itertools.combinations(arr1,2)))
print(res)

类似这样的事情也可能会起作用:

def func(list1, list2):
    already_done = set()
    for i, augend in enumerate(list1):
        for j, addend in enumerate(list1):
            if i == j or i in already_done:
                continue
            else:
                number = augend + addend
                if number in list2:
                    return True
                else:
                    already_done.add(i)
    return False

如果接受添加两倍相同的数字,还可以删除if语句的
if i==j
部分。

类似的操作也可以实现以下目的:

def func(list1, list2):
    already_done = set()
    for i, augend in enumerate(list1):
        for j, addend in enumerate(list1):
            if i == j or i in already_done:
                continue
            else:
                number = augend + addend
                if number in list2:
                    return True
                else:
                    already_done.add(i)
    return False
def check_sum(arr1, arr2):
     for i in range(len(arr1)):
         val = arr1.pop()
         for rem_val in arr1:
             if(val+rem_val in arr2):
                 print(val, rem_val)
                 return(True)
             else:
                 return(False)
如果接受添加两倍相同的数字,还可以删除if语句的
if i==j
部分

def check_sum(arr1, arr2):
     for i in range(len(arr1)):
         val = arr1.pop()
         for rem_val in arr1:
             if(val+rem_val in arr2):
                 print(val, rem_val)
                 return(True)
             else:
                 return(False)
Arr1是第一个数组。pop()将给出列表的最后一个值,并将其从列表中删除。所以,现在我只是运行一个循环,将最后一个值添加到所有可能的值中,并检查arr2的总和


Arr1是第一个数组。pop()将给出列表的最后一个值,并将其从列表中删除。因此,现在我正在运行一个循环,将最后一个值添加到所有可能的值中,并检查arr2的总和。

虽然我试图通过@Abishek Kulkarni编辑答案,但被同行拒绝,建议将其作为答案发布。 所说的答案是不正确的,因为它将尝试将arr1的当前元素与自身相加,以用于第一次迭代之后的后续迭代。 更多说明:

for i in range(0, len(arr1)):
    for j in range(1, len(arr1)):#starting with 1 here is not sufficient to avoid
                                 #checking the self sum of the current element, 
                                 #for example when i=1 and j=1 then self sum of the element
                                 #would be checked 
        if arr1[i] + arr1[j] in arr2:
            print("TRUE")
print("FALSE")
以下是避免自和的修复方法,仅检查arr1的当前元素与arr1的每个其他元素(而不是自身)的组合:


虽然我试图通过@Abishek Kulkarni编辑答案,但被同行拒绝,建议将其作为答案发布。 所说的答案是不正确的,因为它将尝试将arr1的当前元素与自身相加,以用于第一次迭代之后的后续迭代。 更多说明:

for i in range(0, len(arr1)):
    for j in range(1, len(arr1)):#starting with 1 here is not sufficient to avoid
                                 #checking the self sum of the current element, 
                                 #for example when i=1 and j=1 then self sum of the element
                                 #would be checked 
        if arr1[i] + arr1[j] in arr2:
            print("TRUE")
print("FALSE")
以下是避免自和的修复方法,仅检查arr1的当前元素与arr1的每个其他元素(而不是自身)的组合:


你能粘贴错误的完整回溯吗?另外,请修复你的格式。什么是
输入
?名称错误:名称“输入”未定义你能粘贴错误的完整回溯吗?另外,请修复你的格式。什么是
输入
?名称错误:名称“输入”未定义这一秒,但不是返回布尔值,而是打印所有大写字符串以符合预期结果。嵌套循环中似乎存在逻辑错误,这将导致检查相同元素的和(第一次迭代除外)。我已经编辑了您的代码,请务必审阅。我支持此操作,但不是返回布尔值,而是打印所有大写字符串以符合预期结果。嵌套循环中似乎存在逻辑错误,这将导致检查相同元素的和(第一次迭代除外)。我已经编辑了你的代码,一定要检查它。请把你的答案放在上下文中,而不是仅仅粘贴代码。有关更多详细信息,请参阅。请始终将答案放在上下文中,而不仅仅是粘贴代码。有关更多详细信息,请参阅。