如何找到任意两个数的索引,它们的和等于Python中的目标和?

2024-10-03 02:46:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做这个测试testdome.com网站为了练习,它在一些测试用例中失败了。谁能帮我指出代码中的逻辑错误吗?在

这是我的代码的问题:

“写一个函数,当传递一个列表和一个目标和时,有效地返回任意两个数的两个不同的从零开始的索引,它们的和等于目标和。在

如果没有两个数字,函数应该返回None。在

例如,find_two_sum([3, 1, 5, 7, 5, 9], 10)应该返回一个包含以下任何一对索引的元组:

  • 0和3(或3和0),因为3和7的加法等于10。在
  • 1和5(或5和1),因为1和9加起来就是10。在
  • 2加4(或4加2),因为5加5等于10。在
def find_two_sum(numbers, target_sum):
    sss=list(dict.fromkeys(numbers))
    if (sss == None or len(sss) < 2): return None

    for item in sss:
        tesn=target_sum-item
        if tesn in sss: 
            if numbers.index(item)==numbers.index(tesn):
                continue
            else:
                return numbers.index(item),numbers.index(tesn)
    return None
print(find_two_sum([3, 1, 5, 7, 5, 9], 10))

他们有四个测试用例,我的代码只能通过前两个测试用例。在

示例案例:答错了(返回[0,2],因为索引0的3+索引3的7是10)
有无解的不同数字:错误答案
有或无解的重复数字:错误答案
一大串数字的性能测试:错误答案


Tags: 代码noneindexreturnif错误测试用例数字
3条回答

我相信您必须添加一个检查两个索引是否不同。 例如:

print(find_two_sum([3, 1, 5, 7, 5, 9], 6))

函数将给出一个(0, 0)的答案,这是不正确的,尽管这些是3的索引,它本身给出了6的和。在

在这里,我添加了对不同索引的检查:

^{pr2}$

逻辑中的一个缺陷是sss不包含原始列表中可能存在的重复项-您丢失了信息。假设原始列表中没有重复项:list.index(n)将返回第一项的索引,该索引等于n,因此可以得到一个具有重复索引的结果

>>> a = [3, 1, 5, 7, 5, 9]
>>> item = 5
>>> tesn = 5
>>> a.index(item),a.index(tesn)
(2, 2)
>>> 

我对这个问题的看法:

def find_two_sum(lst, n):
    indices = {}
    for idx, num in enumerate(lst):
        indices.setdefault(num, []).append(idx)
    for k, v in indices.items():
        i = v.pop()
        if n - k in indices and indices[n-k]:
            return i, indices[n-k].pop()

print( find_two_sum([3, 1, 5, 7, 5, 9], 6) )
print( find_two_sum([3, 1, 5, 7, 5, 9], 10) )
print( find_two_sum([1, 2, 1, 8], 10) )
print( find_two_sum([5, 5], 10) )
print( find_two_sum([11], 10) )

印刷品:

^{pr2}$

相关问题 更多 >