2015-10-04 64 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

相關問題