在遍历数组时使用 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
我在 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