当我尝试使用任何类型的列表运行此程序时,我的indexerror
:列表索引超出范围。
有什么想法吗?
def binaryListSort(aList):
'''takes a list of binary numbers and puts them in ascending order
inputs: a list of binary integers, aList Outputs: a new list with numbers
in ascending order.'''
if aList[0] == 0:
return aList[0] + binaryListSort(aList[1:])
else:
return binaryListSort(aList[1:]) + aList[0]
答案 0 :(得分:2)
这似乎根本没有做任何类型的排序。您所做的只是检查列表的第一个元素是0,然后砍掉第一个元素并再次检查。如果它永远不是0,最终它将尝试检查空列表的第一个元素,因此错误。
答案 1 :(得分:1)
在每个递归中,您将列表长度减少1,因此您将获得一个空的列表,其长度仅为1,因此当您使用aList [1:]时,它将抛出indexerror。你应该认为aList是空列表。
您可以使用示例进行测试,并且您可以使用以下代码,它将运行良好。
def binaryListSort(aList):
'''takes a list of binary numbers and puts them in ascending order
inputs: a list of binary integers, aList Outputs: a new list with numbers
in ascending order.'''
if len(aList) == 0:
return
if len(aList) == 1:
return aList
if aList[0] == 0:
return [aList[0]] + binaryListSort(aList[1:])
else:
return binaryListSort(aList[1:]) + [aList[0]]
答案 2 :(得分:-1)
使用此循环,您最终将使用仅包含1个项目的列表调用binaryListSort。然后是aList [1]未定义,因此aList [1:]将导致indexerror 您需要在白线中插入代码,如果aList的长度为1,则返回aList。