在遍历数组时使用 list[] 而不是 range() 时列表索引超出范围

List index out of range when using list[] instead of range() when iterating through the array

我在 Coding Bat,Warmup-2 上研究这个问题 > array_front9:

给定一个整数数组,return如果数组中的前 4 个元素之一是 9,则为真。数组长度可能小于 4。

示例:

array_front9([1, 2, 9, 3, 4]) → True
array_front9([1, 2, 3, 4, 9]) → False
array_front9([1, 2, 3, 4, 5]) → False

这是我的有效解决方案:

def array_front9(nums):
  if len(nums) >= 4: 
    for i in range(0,4):
      if nums[i] == 9:
        return True
    return False
  elif 0 <= 0 < 4:
    for i in range(len(nums)):
      if nums[i] == 9:
        return True
    return False
  else:
    if len(nums) == 0:
      return False

但是,在第 3 行中,如果我尝试通过这样写来遍历列表:

for i in num[0:4]:

我会收到列表索引超出范围的错误。有人可以帮我理解为什么我不能这样做吗?

谢谢!

我不知道你为什么要把事情复杂化:

就这样做:

def array_front9(nums):
    return 9 in nums[:4]

print(array_front9([1, 2, 3, 9]),array_front9([1, 2, 3, 4, 9]),array_front9([1, 2, 3, 4, 5]))
# True False False

这将只检查提供的列表的前 4 个元素,并return判断真假!

如果您使用 lambda 一行:

array_front9=lambda nums: 9 in nums[:4]
print(array_front9([1, 2, 3, 9]),array_front9([1, 2, 3, 4, 9]),array_front9([1, 2, 3, 4, 5]))
# True False False

这是一个 2 衬垫版本:

def array_front9(nums):
   return 9 in nums[:4]

您的代码问题:

for i in num[0:4]: 正在遍历列表的元素。例如,如果列表的长度为 9,并且 i=9,您无法获取索引,因为它不存在

你得到 IndexError 的原因是因为你在第 3 行中使用 for i in nums[0:4] 但你没有将 nums[i] 更改为 i.

因此 nums 的值将用作索引。如果 nums 的长度为 4,其中一个值为 7,则您在 nums[7] 处查找不存在的值。

以下是您想要执行的操作的正确用法。 假设你的函数 returns False 如果数组大小小于 4。

a = [1,4,5,6,9]
b = [9,7,5,6]
c = [1]
def array_front9(nums):
  if len(nums) >= 4: 
    for i in nums[0:4]:
      if i == 9:
        return True
  return False

print(array_front9(a))
print(array_front9(b))
print(array_front9(c))
False
True
False