试图在python列表中找到值但是列表超出范围错误?

时间:2017-07-18 20:07:12

标签: python list loops int

很抱歉,这是一个简单的问题。我是Python的新手。我正在尝试编写一个函数来检测是否有2个连续的2个彼此相邻。 nums是一个随机的int数组。但是,我收到的错误是列表超出范围。谁能告诉我为什么会这样?谢谢!

def has22(nums):
 for ii in nums:
    if nums[ii]==2:
      if ii+1 < len(nums):
        if ii+1 == 2:
          return True
  return False

4 个答案:

答案 0 :(得分:3)

正如之前的评论者指出的那样,ii是实际数字而不是列表中数字的索引。例如,对于列表nums = [3, 7, 4],循环使用3,7和4作为ii,而不是0,1和2.这将导致错误,因为每个数字都大于最大索引。 / p>

解决此问题的一种方法(可以说比其他建议更优雅)是使用enumerate()

def has22(nums):
  for index, num in enumerate(nums):
    if num==2:
      if index+1 < len(nums):
        if nums[index+1] == 2:
          return True
  return False

enumerate()返回一个迭代器,该迭代器为每个项返回一个元组,该元组包含项的索引和项本身。因此,index, num分别被分配给列表中的数字索引和数字本身。

答案 1 :(得分:1)

请参阅下面的评论

def has22(nums):
    for i in range(len(nums)-1): # here we get the length of list - 1
       if nums[i]==2 and nums[i+1]==2: # in this if condition, we check whether 2 consecutive 2 exist or not: yes ->return true
           return True
    return False # if no 2 consecutive 2 found in the list, return false

答案 2 :(得分:1)

def has22(nums):
 for ii in range(len(nums)):
    if nums[ii]==2:
      if ii+1 < len(nums):
        if nums[ii+1] == 2:
          return True
 return False

我建议做更优雅的事情,比如这个

def has22(nums):
    for i in range(len(nums)-1):
        if nums[i] == nums[i+1] == 2:
            return True
    return False

答案 3 :(得分:0)

变化:

for ii in nums:

for ii in range(len(nums) - 1):

if ii+1 == 2:

if nums[ii+1] == 2: