首页 > 解决方案 > 使用 for 循环获取列表中项目的错误索引

问题描述

我试图返回列表中两个元素的索引,其总和等于目标值(leetcode 问题):

def twoSum(self, nums: List[int], target: int) -> List[int]:
    for i in nums :
        for j in nums:
            if nums.index(i)!=nums.index(j) and i+j==target:
                return nums.index(i),nums.index(j)
Your input:
    [2,7,11,15]

    9

Output:
    [0,1]
Expected:
    [0,1]

对于给定的输入,上面的代码片段工作正常,但对于 [3,3] 它返回“[]”

Input:
    [3,3]
    6
Output:
    []
Expected:
    [0,1]

我尝试使用简单的 for 循环,不仅用于 [3,3] 用于返回 [] 的所有相同输入,例如:[1,1],[2,2][1,1,1] 等等为什么它返回[]?

标签: listindexing

解决方案


问题在于 nums.index 函数的使用。它的实现方式,它返回列表的第一个索引,其中参数等于列表中的元素(可以在此处找到)。因此,在输入为 [3, 3] 的此循环的每次迭代中,nums.index(i) 和 nums.index(j) 调用始终返回 0(因为输入的第 0 个索引包含 3,即值i 和 j 的每次迭代)。因此,每次迭代的检查都失败并且没有返回任何内容。在我重现您的问题时,我的函数返回 None 而不是 []。也许您的类型注释 None 被解释为 []。

避免此问题的另一种方法可能包括迭代输入的索引而不是值。


推荐阅读