列表分配超出范围 - Python

时间:2017-05-24 15:19:08

标签: python

我知道列表分配不起作用,因为它是一个空列表,但我不知道如何解决这个特定问题。任何帮助将不胜感激。收到的错误是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)

3 个答案:

答案 0 :(得分:2)

new_list[insert_position] = value

当您执行此操作时,new_list仍然为空,因此您无法在(随机)索引处进行分配。如果您的说明表明您只应使用append,那么您应该这样做。

这应该是解决第三种情况的策略:

  1. 假设原始列表的长度为n,则由于您要插入一个元素,因此列表的新长度将为n + 1
  2. 因此,循环遍历 new 列表(0..n+1)的所有索引。
  3. 只要当前索引仍然低于您要插入的索引,只需附加原始列表中的项目。
  4. 如果您点击要插入的索引,请附加新项目。
  5. 对于原始列表中的所有剩余项目,只需附加它们即可。请注意,与原始列表相比,您的索引增加了一个。
  6. 您也可以使用原始列表的当前索引进行迭代,然后您无需调整其余项目的索引。

    奖励积分:如果您正确执行此操作,则无需再明确处理案例insert_position == 0insert_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']