2017-07-18 40 views
0

對不起,如果這是一個簡單的問題。我是Python的新手。我試圖編寫一個函數來檢測是否有2個連續的2彼此相鄰。 nums是一個隨機的整數數組。但是,我收到一個列表超出範圍的錯誤。誰能告訴我爲什麼這是?謝謝!試圖找到一個python列表中的值,但得到列表超出範圍錯誤?

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

如果您的列表中有5個項目,但其中一個項目的_value_例如是9,那麼'nums [ii]'將查找該列表中的第10個項目(由於零索引)。 – roganjosh

+2

注意:'ii'將會是數字本身,而不是數組中的索引。 –

+1

我會在鏈接的問題中使用Kasramvd的第二個版本的變體:'任何(我== j == 2爲我,zip中的j(nums,nums [1:]))''。 –

回答

0

變化:

for ii in nums: 

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

if ii+1 == 2: 

if nums[ii+1] == 2: 
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 
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

正如前面的評論者所指出的,二是實際數量,而不是列表中的數字的索引。例如,對於列表nums = [3, 7, 4],循環使用3,7和4作爲ii,而不是0,1和2.這會導致錯誤,因爲每個數字都大於最大索引。解決這個(可以說多於其他建議優雅)

的一種方法是使用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 

枚舉()返回一個迭代,這對於各項目返回包含項的索引和一個元組項目本身。因此,index, num分別被分配給列表中的號碼索引和號碼本身。

+0

但即使如此,這些方法也讓人聯想到天真的語言方法。 我相信對每個元素使用正則表達式會比使用MATCH更好,等等。 – anugrah

+2

@anugrah不!爲此使用正則表達式是矯枉過正的,此外,您必須將列表項轉換爲使用正則表達式的字符串, –

相關問題