Python - 在尝试将值分配给循环中的列表项时,列表分配索引超出范围

时间:2015-10-04 12:49:05

标签: python list

我试图在两个嵌套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值比赛。当找不到匹配时,我将当前的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

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

1 个答案:

答案 0 :(得分:2)

问题在于您在此行中初始化new_list的方式:

new_list = list(list_init)

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

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

然后,如果base_list的长度是> 4,您尝试在索引5处为new_list分配元素,并获取IndexError

您应该像这样创建new_list

new_list = [None] * len(base_list)

通过这种方式,您可以确保new_list的长度与base_list相同,并且您不会获得任何IndexErrorsflag也是如此。