重写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

list index out of range在最后一个while子循环中收到错误,但我无法弄清原因。while循环考虑了新的列表长度(while i < len(my_list) + 1)。我想念什么?

卡尔

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

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

while循环不会结束,因为i它将始终大于,insert_position并且最终i值将超出的长度my_list


如果您更改代码逻辑以if在while循环内使用语句,那么我认为这会更好,然后您只需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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章