【发布时间】:2018-11-12 23:46:39
【问题描述】:
这2段python代码有什么区别?
我想检查一个数组是否依次包含整数 1,2,3 作为其元素?
def arrayCheck(nums):
for i in nums:
if(i <= (len(nums)-3)):
if (nums[i] == 1 and nums[i+1] == 2 and nums[i+2] == 3):
return(True)
return(False)
def arrayCheck(nums):
for i in range(0,len(nums)-2):
if (nums[i] == 1 and nums[i+1] == 2 and nums[i+2] == 3):
return(True)
return(False)
第一个对数组给出了错误的答案:
arrayCheck([1,1,2,1,1,1,1,2,3])
但第二个是正确的。
【问题讨论】:
-
for i in nums:不是遍历索引,而是遍历实际的列表项。 -
for i in nums:这里“i”不包含索引值,“i”包含列表项值。 "in" 运算符迭代项目,而不是索引。让输入为 [1,1,2,1,1,1,1,2,3]。在第一次迭代中, i=1,i+1=2,i+2=3 所以, nums[1]=1 nums[2]=2 nums[3]=1 。 . . . .在最后一次迭代中,i=1,i+1=2,i+2=3 再次访问 nums[1],nums[2] 和 nums[3]!但是您希望检查 nums[6],nums[7],nums[8]。每次当 i=1 时,您正在访问索引 1,2 和 3。这就是您收到此错误的原因。在第二个函数中,您正在访问索引值,所以它正在工作。
标签: python