【问题标题】:Python - list assignment index out of range when trying to assign value to list item within loopPython - 尝试为循环内的列表项分配值时,列表分配索引超出范围
【发布时间】:2015-10-04 12:49:04
【问题描述】:

我正在尝试在两个嵌套 for 循环内的列表中分配(或替换)项目。以下是代码(base_list 已定义,因此代码可能看起来不完整):

list_init = 'test'
# converting new list to type list
new_list = list(list_init)
flag = [0]
for i in range(len(base_list)):
    for j in range(i, len(base_list)):

        if base_list[i] == base_list[j]:
            print(base_list[j],' is equals to', base_list[i])
            # below is the error line
            new_list[j] = base_list[j]
            flag[j] = 1
        else:
            print(base_list[j],' is not equals to', base_list[i])
            # below is the error line
            new_list[j] = base_list[j]
            flag[j] = 0

我正在做的是对同一个列表 (base_list) 进行两次迭代,以将列表中的每个元素与该元素之后的其他元素进行比较,每当找到匹配项时,我都会将第一个 base_list 值分配给每个元素的 new_list匹配。当未找到匹配项时,我将当前的 base_list 值原样分配给新列表。因此我将第二个循环作为:

for j in range(i, len(base_list))

这是为了确保第二个循环从第一个循环中活动的列表项开始,而不是从头开始迭代。

现在问题出在下面一行:

new_list[j] = base_list[j]

我收到以下错误:

new_pl[j] = pl_list[i]
IndexError: list assignment index out of range

我在使用标志列表时遇到了同样的问题:

flag[j] = 1

您能否建议使用索引在循环中分配(或替换)列表元素值的任何解决方案?

【问题讨论】:

    标签: python list


    【解决方案1】:

    问题在于您初始化new_list 的方式,在这一行中:

    new_list = list(list_init)
    

    您的list_init 设置为'test',所以当您创建new_list 时,它看起来像

    ['t', 'e', 's', 't']
    

    然后,如果base_list 的长度> 4,则您尝试将一个元素分配给new_list,例如索引5,并得到一个IndexError

    你应该像这样创建new_list

    new_list = [None] * len(base_list)
    

    这样您可以确保new_listbase_list 具有相同的长度,并且您不会得到任何IndexErrorsflag 也是一样。

    【讨论】:

    • 感谢您的回复,但即使我删除了错误的初始化并按照您的指示进行操作,我也会遇到同样的错误。循环有什么问题吗?我是python初学者所以不知道。 :)
    • 现在错误变成:"IndexError: list index out of range" 当我在做:new_list[j] = base_list[i]
    • 更新:即使我试图打印 base_list 值,像这样:print(base_list[i]),在 if 条件之后,它给出的列表索引超出范围错误。
    • 我认为这是我的错。非常感谢您的帮助。如果有任何问题,我会回来的。测试后将标记为绿色。 :)
    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2018-10-21
    • 2019-06-18
    • 2020-02-13
    • 1970-01-01
    相关资源
    最近更新 更多