为什么我收到错误消息:在Python中列出索引超出范围

时间:2014-02-16 14:52:26

标签: python list python-3.x indexing

当我尝试使用任何类型的列表运行此程序时,我的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]

3 个答案:

答案 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。