Python 给定一个数组,查找其和等于给定和的元素对,并返回其索引的和

Python 给定一个数组,查找其和等于给定和的元素对,并返回其索引的和,python,algorithm,pairwise,Python,Algorithm,Pairwise,大家好,正如你们在问题中读到的,我试图找到数组中等于给定和的元素对,并返回它们各自索引的和 我能够返回给定总和的元素对,但未能返回其索引的总和。这是我的密码: arr = [1, 4, 2, 3, 0 , 5] sum = 7 x = min(arr) y = max(arr) while x < y: if x + y > sum: y -= 1 elif x + y < sum: x += 1 else:

大家好,正如你们在问题中读到的,我试图找到数组中等于给定和的元素对,并返回它们各自索引的和

我能够返回给定总和的元素对,但未能返回其索引的总和。这是我的密码:

arr = [1, 4, 2, 3, 0 , 5]
sum = 7

x = min(arr)
y = max(arr)

while x < y:
    if x + y > sum:
        y -= 1
    elif x + y < sum:
        x += 1
    else:
        print("(", x, y, ")")
        x += 1
这是我需要进一步做的:

2+5=7→ 指数2+5=7

3+4=7→ 指数3+1=4

7+4=11→ 返回11


提前谢谢

您可以尝试使用嵌套循环:

arr = [1, 4, 2, 3, 0 , 5]
sums = 7
tlist = []
for i in range(len(arr)):
    for j in range(len(arr)-1):
        if (i!=j) and ((arr[i] + arr[j+1]) == sums):
            if (i,j+1) not in tlist and (j+1,i) not in tlist:
                tlist.append((i,j+1))
                print("index ->",i,"   ",j+1)
                print("sum=", i+j+1)
输出:

index -> 1     3
sum= 4
index -> 2     5
sum= 7

您可以使用
itertools
轻松检查
sum
中的
组合

>>> import itertools
>>> num = 7
>>> for a,b in itertools.combinations(arr, 2):
...   if a + b == num:
        aindex, bindex = arr.index(a), arr.index(b)
...     indices_sum = aindex + bindex
...     print('[element sum]: {} + {} = {} [indices sum]: {} + {} = {}'.format(a, b, a + b, aindex, bindex , indices_sum))
... 
[element sum]: 4 + 3 = 7 [indices sum]: 1 + 3 = 4
[element sum]: 2 + 5 = 7 [indices sum]: 2 + 5 = 7
>>> arr
[1, 4, 2, 3, 0, 5]

您可以采用不同的方法,计算差异,然后检查第一个数组中是否存在每个元素

arr = [1, 4, 2, 3, 0, 5]
the_sum = 7

diff = [the_sum - x for x in arr]
for idx, elem in enumerate(diff):
    try:
        index = arr.index(elem)
        sum_of_indices = idx + index
        print("{} + {} = {}".format(idx, index, sum_of_indices))
    except ValueError:
        pass
输出

1 + 3 = 4
2 + 5 = 7
3 + 1 = 4
5 + 2 = 7
要删除重复项,通常很容易获取索引元组的
frozenset

a = [(2,1), (1,2), (3,2), (2,3)]
{frozenset(x) for x in a} # {frozenset({2, 3}), frozenset({1, 2})}

不确定为什么会返回
7+4=11
。总和不是
7
?我正在尝试添加元素对索引的总和。(2,5)->指数之和=7和(3,4)->指数之和=4…..然后加上累积指数7+4=11从问题中,我看到你在尝试添加元素对的
指数,其
和等于你指定的某个数字,比如说
7
,对吗?是的,没错,这就是为什么我要问为什么问题1,3和3中提到了
7+4=11-->返回11
,1两者都相同,5,2和2,5可以根据需要修改解决方案。如果这些数字不重复,取一组和就足够了。
a = [(2,1), (1,2), (3,2), (2,3)]
{frozenset(x) for x in a} # {frozenset({2, 3}), frozenset({1, 2})}