在循环中尝试给列表项赋值时,列表赋值索引超出范围



我试图在两个嵌套的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

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

问题在于您初始化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_listbase_list具有相同的长度,并且您不会得到任何IndexErrorsflag也是一样

最新更新