2015-07-13 152 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