获取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()
在这里运行索引超出范围。
答案 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)
但是因为你的函数似乎在列表中检测到重复,所以一切看起来很好