首页 > 解决方案 > 使用嵌套 for 循环遍历单个列表时索引超出范围

问题描述

我正在解决一个挑战,我正在尝试使用嵌套的 for 循环来解决它。挑战要求在给定的整数数组nums和一个整数k中,确定是否有两个不同的索引i以及j在数组中的位置和之间的nums[i] = nums[j]绝对差值小于或等于。ijk

这是我的尝试:

def containsCloseNums(nums, k):

    for i in nums:
        for j in nums:
            if (nums[i] == nums[j]) and abs(i-k) <= k:
                return True
            else:
                return False

但这是我得到的错误:

Traceback (most recent call last):
  main.py3 in the pre-written template, in getUserOutputs
    userOutput = _rundyxlc(testInputs[i])
  main.py3 in the pre-written template, in _rundyxlc
    return containsCloseNums(*_fArgs_zeutcbsrcmec)
  main.py3 in the pre-written template, in containsCloseNums
    if (nums[i] == nums[j]) and abs(i-j) <= k:
IndexError: list index out of range

我没有看到为什么我会超出索引的原因,因为我没有增加超出列表的长度。

我感谢所有帮助,但由于这是一个挑战,所以知道为什么我的逻辑不起作用而不是仅仅吐出答案对我来说更有益。

标签: python

解决方案


在您的代码中

for i in nums:

“i”是此列表“nums”中的项目。

您应该更改为:

for index_i, value_i in enumerate(nums):

那么“index_i”是项目的索引,而value_i是列表“nums”中项目的值

顺便说一句,我认为应该是:

def containsCloseNums(nums, k):

    for i_index, i_value in enumerate(nums):
        for j_index, j_value in enumerate(nums):
            if (i_value == j_value) and abs(i_index-j_index) <= k:
                return True
            else:
                return False

推荐阅读