重写insert()函数-列表索引超出范围

时间:2018-11-18 02:14:04

标签: python list insert

我实质上是在尝试为作业分配重新创建insert()函数的版本。 我编写了以下函数:

def insert_value(my_list, value, insert_position):
    list_copy = []

    if insert_position < 0:
        insert_position = 0

    if insert_position >= len(my_list):
        insert_position = len(my_list) - 1

    i = 0
    while i < len(my_list) + 1:
        while i < insert_position:
            list_copy.append(my_list[i])
            i += 1

        while i == insert_position:
            list_copy.append(value)
            i += 1

        while i > insert_position:
            list_copy.append(my_list[i-1])
            i += 1

    return list_copy

在最后一个while子循环中出现错误list index out of range,但我不知道为什么。 while循环说明了新列表的长度(while i < len(my_list) + 1)。我想念什么?

1 个答案:

答案 0 :(得分:3)

您的问题是因为您使用的是嵌套的while循环,这些循环的在条件为false之前不会退出。因此,在所有嵌套的while循环完成之前,不会进行i小于my_list长度的外部while循环检查(它从来没有这样做)。具体来说,我认为问题在于此处的最后一个while循环:

while i > insert_position:
    list_copy.append(my_list[i-1])
    i += 1

while循环不会结束,因为i总是大于insert_position,最终i的值将超出my_list的长度。


如果您更改代码逻辑以在while循环内使用if语句,我认为这会更好,然后您只需在末尾增加一次i

i = 0
while i < len(my_list) + 1:
    if i < insert_position:
        list_copy.append(my_list[i])
    elif i == insert_position:
        list_copy.append(value)
    else:
        list_copy.append(my_list[i-1])

    i += 1