首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List Assignment Out Range - Python

List Assignment Out Range - Python
EN

Stack Overflow用户
提问于 2017-05-24 23:19:08
回答 3查看 294关注 0票数 1

我知道列表赋值不起作用,因为它是一个空列表,但我不知道如何解决这个特定的问题。任何帮助都将不胜感激。收到的错误是new_list[insert_position] = value列表分配索引超出范围。除了主要的其他部分之外,一切都可以正常工作。注意--这个特定的任务要求我不要使用除append()之外的字符串/列表方法

代码语言:javascript
复制
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)
EN

回答 3

Stack Overflow用户

发布于 2017-05-24 23:26:09

代码语言:javascript
复制
new_list[insert_position] = value

此时,new_list仍然为空,因此不能在(随机)索引处赋值。如果您的说明告诉您应该只使用append,那么您就应该这么做。

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

  1. 假设原始列表的长度为n,则列表的新长度将为n + 1,因为您正在插入一个元素。
  2. 因此循环遍历新列表的所有索引,只要当前索引仍低于要插入的索引,则只需追加原始列表中的项。
  3. 如果命中要插入的索引,则追加新项。
  4. 对于原始列表的所有其余项,只需追加它们。请注意,与原始列表相比,您的索引前进了一步。

您也可以只使用原始列表的当前索引进行迭代,这样就不需要调整其余项的索引。

加分:如果操作正确,就不再需要显式处理insert_position == 0insert_position == len(my_list)的情况。

票数 2
EN

Stack Overflow用户

发布于 2017-05-24 23:24:25

代码语言:javascript
复制
elif insert_position >= length(my_list):

将其更改为:

代码语言:javascript
复制
elif insert_position > length(my_list)-1:

如果你的列表有4个条目,那么长度是4,最后一个索引是3,所以你需要检查索引是否大于长度-1。

票数 0
EN

Stack Overflow用户

发布于 2017-05-24 23:29:36

问题是,您检查了my_list的长度并将值插入到new_list,新列表为空,但您向索引1插入了一个值。您可以做的是深入复制my_list并修改新列表

代码语言:javascript
复制
import copy

然后用new_list = copy.deepcopy(my_list)替换new_list=[]

则new_list结果将为

代码语言:javascript
复制
['one', 'two', 'three', 'four', 'five']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44162501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档