Python 3.x 如何在列表中循环并比较两个数字之间的和,最后返回具有最接近索引分组的答案?

Python 3.x 如何在列表中循环并比较两个数字之间的和,最后返回具有最接近索引分组的答案?,python-3.x,indexing,slice,closest,Python 3.x,Indexing,Slice,Closest,基本上,我试图在一个列表中找到两个元素,它们加在一起就得到了正确的给定和 例如: aList = [1,5,6,3,8,9,4] sum = 10 现在,在上述条件下,我预计会有两个结果: [1, 9] and [6, 4] 答案应该是[6,4],因为它们彼此最接近。1到9需要采取4个步骤,[6,4]只需要采取3个步骤。最短的索引差异 下面是我的代码,它不适用于上面的示例: def sum_pairs(ints, s): for i in ints: for b in ints[i

基本上,我试图在一个列表中找到两个元素,它们加在一起就得到了正确的给定和

例如:

aList = [1,5,6,3,8,9,4]  sum = 10
现在,在上述条件下,我预计会有两个结果:

[1, 9] and [6, 4]
答案应该是[6,4],因为它们彼此最接近。1到9需要采取4个步骤,[6,4]只需要采取3个步骤。最短的索引差异

下面是我的代码,它不适用于上面的示例:

def sum_pairs(ints, s):
for i in ints:
    for b in ints[i:]:
        if i + b == s:
            return [i,b]
else:
    return None

那么,在不写入另一个循环的情况下,如何检查最近索引之间的关系呢?

如果您想找到步数最少的数字,请在距离上循环,并尝试使用给定距离之间的所有元组-如果您没有用尽距离为3的所有元组,则不应尝试使用4个空格之间的配对

def sum_pairs(ints, s):
    for distance in range(1, len(ints)):
        for idx in range(len(ints) - distance):
            if ints[idx] + ints[idx + distance] == s:
                return [ints[idx], ints[idx + distance]]
    return None

一个简单但不是最有效的答案-请参阅另一个发布的答案:通过查看字符之间的空格来添加循环,这是更好的解决方案:

def sum_pairs(ints, s):
    answer = None
    distance = 10
    for i in ints:
        for b in ints[i:]:
            if i + b == s and abs(i - b) < distance:
                answer = (i, b)
                distance = abs(i - b)
return answer

在返回任何内容之前,您需要将所有可能的解决方案存储到列表中

a = []
def sum_pairs(ints, s):
    for i in ints:
        for b in ints[i:]:
            if i + b == s:
                a.append([i,b])
    return a

aList = [1,5,6,3,8,9,4]

print sum_pairs(aList,10)

输出:[[1,9],[6,4]]

您根本没有真正测试您拥有的对之间的差异,只是返回您输入的和的所有匹配项的列表

nums = [1,5,6,3,8,9,4]

def sum_pairs(ints, s):
  matches = []
  for i in range(len(ints)):
    x = ints[i]
    for y in ints[i + 1:]:
      if x + y == s: matches.append([x, y])
  differences = {}
  for x, y in matches:
    differences[abs(x - y)] = [x, y]
  return differences[min(differences.keys())]

>>> sum_pairs(nums, 10)
# [6, 4]

你收到错误消息了吗?如果我没弄错的话,问题不在于代码在执行失败的意义上不工作;问题是它返回第一个工作对,而不是最接近的…@Archeo是的,你是对的,它工作,但不返回最接近的索引对。谢谢你的澄清。