index列表中的索引超出范围

时间:2018-01-18 11:17:31

标签: python

我正在学习python的基础知识,并尝试解决上述问题。但是,我在这一点上陷入困​​境:当我修改代码时,一切似乎都没问题,但是我收到了错误:

print repr(string), numbers_in_lists(string) == result
  File "/tmp/vmuser_tmqtokdyaa/main.py", line 25, in numbers_in_lists
    while int(string[i]) <= prev:
IndexError: string index out of range

我确实修改了具有相同IndexError问题的其他线程,但它并没有解决我的情况。有线索吗?提前谢谢。

执行任务:

SeanMc在论坛中列出的数字 定义一个从1-9和1开始接收一串数字的过程 输出包含以下参数的列表: 字符串中的每个数字都应插入列表中。 如果字符串中的数字x小于或等于 在前面的数字y中,应插入数字x 进入子列表。继续添加以下数字到 子列表直到达到数字z 大于y。 然后将此数字z添加到正常列表中并继续。

def numbers_in_lists(string):
    i=0
    prev = 0
    list = []
    sublist = []
    while i< len(string):
        if int(string[i]) > prev:
            list.append(string[i])
            prev = int(string[i])
            i +=1
        else:
            while int(string[i]) <= prev:
                sublist.append(string[i])
                i +=1
            list.append(sublist)
            sublist = []
    return list

#testcases
string = '543987'
result = [5,[4,3],9,[8,7]]
print repr(string), numbers_in_lists(string) == result
string= '987654321'
result = [9,[8,7,6,5,4,3,2,1]]
print repr(string), numbers_in_lists(string) == result
string = '455532123266'
result = [4, 5, [5, 5, 3, 2, 1, 2, 3, 2], 6, [6]]
print repr(string), numbers_in_lists(string) == result
string = '123456789'
result = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print repr(string), numbers_in_lists(string) == result

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为在这个内部while,您收到错误,您不会检查i < len(str)是否继续增加,只检查与此问题无关的条件,忽略您是否& #39;已达到字符串的最后一个字符。 我会改为:

def numbers_in_lists(string):
    i=0
    prev = 0
    list = []
    sublist = []
    while i< len(string):
        if int(string[i]) > prev:
            list.append(string[i])
            prev = int(string[i])
            i +=1
        else:
            while  i< len(string) and int(string[i]) <= prev:
                sublist.append(string[i])
                i +=1
            list.append(sublist)
            sublist = []
    return list

我会考虑在你的情况下使用for循环而不是while,但无论如何都在上面。