我知道列表分配不起作用,因为它是一个空列表,但我不知道如何解决这个特定问题。任何帮助将不胜感激。收到的错误是new_list[insert_position] = value
列表分配索引超出范围。一切都有效,除了主要的其他部分。注意 - 此特定任务要求我不使用除append()
def insert_value(my_list, value, insert_position):
new_list = []
if insert_position <= 0:
new_list.append(value)
for i in my_list:
new_list.append(i)
elif insert_position >= length(my_list):
for i in my_list:
new_list.append(i)
new_list.append(value)
else:
index = []
for i in range(length(new_list)):
if i != insert_position:
index.append(i)
new_list[insert_position] = value
for i in index:
if i < insert_position:
new_list[i] = my_list[i]
else:
new_list[i] = my_list[i - 1]
return new_list
print("\ninsert_value Test")
str_list3 = ['one','three','four', 'five', 'six']
new_list = list_function.insert_value(str_list3, 'two', 1)
答案 0 :(得分:2)
new_list[insert_position] = value
当您执行此操作时,new_list
仍然为空,因此您无法在(随机)索引处进行分配。如果您的说明表明您只应使用append
,那么您应该这样做。
这应该是解决第三种情况的策略:
n
,则由于您要插入一个元素,因此列表的新长度将为n + 1
。0..n+1
)的所有索引。您也可以使用原始列表的当前索引进行迭代,然后您无需调整其余项目的索引。
奖励积分:如果您正确执行此操作,则无需再明确处理案例insert_position == 0
和insert_position == len(my_list)
。
答案 1 :(得分:0)
elif insert_position >= length(my_list):
将其更改为:
elif insert_position > length(my_list)-1:
如果您的列表有4个项目,长度为4,则最后一个索引为3.因此您需要检查索引是否大于长度-1。
答案 2 :(得分:0)
问题是您检查了my_list的长度并将值插入new_list
,新列表为空,但您为索引1插入了一个值。您可以做的是深拷贝my_list
和修改新列表
import copy
然后将new_list=[]
替换为new_list = copy.deepcopy(my_list)
然后new_list结果将是
['one', 'two', 'three', 'four', 'five']