python列表索引超出范围isinstance()

时间:2015-07-13 10:14:43

标签: python

获取IndexError:运行时列出超出范围:

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()在这里运行索引超出范围。

3 个答案:

答案 0 :(得分:1)

最重要的是永远不要命名变量list,string,dict etc..

list变量为空,所以只有这个错误

它发生在这里:

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)

检查列表是否可用然后尝试获取它的第一个元素

答案 1 :(得分: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])

答案 2 :(得分:0)

如果你看第一个if语句:

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

在您的测试用例中,从未满足此条件。因此,您永远不会向list添加任何内容。

您应该检查您的列表之前是否为空,如下所示:

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

但是因为你的函数似乎在列表中检测到重复,所以一切看起来很好