我知道列表分配不起作用,因为它是一个空列表,但我不知道如何解决这个特定问题。任何帮助将不胜感激。收到的错误是 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)
最佳答案
new_list[insert_position] = value
在执行此操作时,new_list
仍为空,因此您无法在(随机)索引处进行分配。如果您的说明表明您应该只使用append
,那么您应该这样做。
这应该是解决第三种情况的策略:
- 假设原始列表的长度为
n
,由于您要插入一个元素,因此新列表的长度将为n + 1
。 - 因此循环遍历 new 列表的所有索引 (
0..n+1
)。 - 只要当前索引仍然低于您要插入的索引,只需从原始列表中追加该项目即可。
- 如果您点击要插入的索引,请追加新项目。
- 对于原始列表中的所有剩余项目,只需追加它们即可。请注意,与原始列表相比,您的索引已前进了 1。
您也可以只使用原始列表的当前索引进行迭代,然后不需要调整其余项目的索引。
<小时/>奖励积分:如果你做得正确,你不再需要显式处理 insert_position == 0
和 insert_position == len(my_list)
情况。
关于python - 列表赋值超出范围 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44162501/