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是的,你是对的,它工作,但不返回最接近的索引对。谢谢你的澄清。