2015-07-13 88 views
0

獲取一個IndexError的:列出的範圍內,當我運行:Python列表索引超出範圍isinstance()

duplicates([0, 1, 2, 3, 4, 5]) 

當我在shell中運行:

list = [0, 1, 2, 3, 4, 5] 
list = ['blah', 1, 2, 3] 

if (isinstance(list[0], str)): 
    list.append(list[0]) 
    list.pop(0) 

,一切工作正常。

def duplicates(array): 
    list = [] 
    for i in array: 
     if (array.count(i) > 1): 
      if (list.count(i) < 1): 
       list.append(i) 
      else: pass 

    # has nothing to do with problem statement. Test cases are requiring a specific output format that isn't highlighted in original problem. 
    list.sort() 
    list.reverse() 

    if (isinstance(list[0], str)): 
     list.append(list[0]) 
     list.pop(0) 

    return list 

但是,當我將它作爲標準函數運行時,它會運行此錯誤。我不明白爲什麼isinstance()在這裏運行的索引超出範圍。

+0

是完整的程序? ?你在哪裏調用函數?你能寫出你如何使用這個函數嗎? – Ja8zyjits

+2

不是引發異常的'isinstance()'。它是'list [0]'表達式,因爲'list'是*空*。 –

+0

全功能。我只是通過測試用例傳遞數組的函數。問題是codewars.com中的一個入門級問題,叫做'find duplicates' – Johnathan

回答

1

所有的最重要的事情是從來沒有名稱的變量list,string,dict etc..

列表變量是空的,所以只有這個錯誤

它發生在這裏:

list = [] 
for i in array: 
    if (array.count(i) > 1): 
     if (list.count(i) < 1): 
      list.append(i) 
     else: pass 

根據你輸入功能沒有重複,所以第一個if失敗,所以沒有值list

您試圖訪問一個受造的指數

即)

las=[] 
las[0] 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

在你的程序:

if (isinstance(list[0], str)): 
    list.append(list[0]) 
    list.pop(0) 

要檢查list[0]這是一個空字符串,因此引發錯誤

按照您的程序

你只存儲重複值list變量,因爲您輸入不包含任何重複的值,它表明這個錯誤

你可以試試這個

修改:

if (list) and(isinstance(list[0], str)): 
    list.append(list[0]) 
    list.pop(0) 

它檢查是列表可用,然後嘗試獲取它的第一個元素

+0

你能否詳細說明爲什麼或者指向解釋這個的參考?當我運行它沒有如果(isinstance(list [0],str)): list.append(list [0]) list.pop(0),它工作正常。 – Johnathan

+0

運行[4]兩者都檢測不到問題。 – Johnathan

+0

等待會添加更多的細節 – The6thSense

0
def duplicates(array): 
    list = [] 
    for i in array: 
     if (array.count(i) > 1): 
      if (list.count(i) < 1): 
       list.append(i) 
      else: 
       pass 

    # has nothing to do with problem statement. Test cases are requiring a specific output format that isn't highlighted in original problem. 
    list.sort() 
    list.reverse() 

    if len(list) > 0: 
     if (isinstance(list[0], str)): 
      list.append(list[0]) 
      list.pop(0) 

    return list 

duplicates([0, 1, 2, 3, 4, 5]) 
0

如果你看一下第一個if語句:

if (array.count(i) > 1):

在您的測試案例,這種情況從來沒有遇到過。所以你永遠不會追加任何東西到list

你應該檢查你的列表之前是不是空的,就像這樣:

if (len(list) > 0 and isinstance(list[0], str)): 
     list.append(list[0]) 
     list.pop(0) 

但你的功能似乎檢測列表中的重複,一切都看起來不錯有

+0

謝謝。說得通。 – Johnathan