很抱歉,这是一个简单的问题。我是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
答案 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: