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

标签 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

我收到错误 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

<小时/>

如果您更改代码逻辑以在 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

关于python - 重写 insert() 函数 - 列表索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53357314/

相关文章:

mysql - "Unknown column in ' 字段列表 '",但列确实存在

python - 如何设置从第三列绘制值的条件? python / Pandas

c# - 使用 2 个字段对 C# 进行列表排序

java - GWT 列表对象

java - 模拟一个列表并尝试迭代它

java - 使用 Java 将数据插入 mySQL DB 时出错

python - tkinter中的输入错误

python - Pandas 缺少必需的依赖项 ['numpy']

python - 如何在 Django 中使用 {% url %} 语句调用 "wizard view"?

php - 插入具有运行余额的行