2015-10-04 54 views
1

我想分配(或替换)两个嵌套for循环内列表中的项目。下面是代码(base_list已经被定义,所以代码可能看起来不完全):Python - 列表分配索引超出范围时尝试将值分配给循环内的列表项目

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 

您可以请建议任何解决方案来分配(或替换)循环内的列表元素值使用指数?

回答

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同样的事情。

+0

感谢您的回复,但即使我删除了错误的初始化,并按照您的说法进行操作,但我也遇到了同样的错误。在循环或其他方面有什么问题吗?我是一个Python初学者,所以不知道。 :) – Rishabh

+0

现在的错误已成为:“IndexError:列表索引超出范围”,当我在做:new_list [j] = base_list [i] – Rishabh

+0

更新:即使我试图打印base_list值,如下所示:print base_list [i]),在if条件之后,它给列表索引超出范围错误。 – Rishabh

相关问题