【问题标题】:What is the difference between the following two python methods? [duplicate]以下两种python方法有什么区别? [复制]
【发布时间】: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


【解决方案1】:

第一个块i 是参数的元素。第二,这只是他们的指数。

如果您希望第一个迭代索引而不是元素,请使用此

def arrayCheck(nums):
    for i, _ in enumerate(nums):
        if i <= len(nums)-3:

顺便说一下,你也可以使用列表切片

if nums[i:i+2] == [1,2,3]:
    return True 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    相关资源
    最近更新 更多