我实质上是在尝试为作业分配重新创建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
)。我想念什么?
答案 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