2013-01-04 84 views
-1

我在一個循環中創建一個名爲'temp'的列表,並將它添加到一個母親列表'trouble'中。當我在循環的第二輪中將「臨時」添加到「麻煩」時,「麻煩」本身似乎正在改變。 爲了清晰起見,我簡化了代碼以僅包含此實例。Python:將列表添加到列表更改列表

award=[[['A',1],['B',1]],[['A',1],['C',1]],[['A',1],['C',1],['D',1]]] 

trouble=[] 
print '\n' 
for n in range(len(award)-1): 
    temp=[] 
    for i in range(len(award[n])): 
      temp.append(award[n][i]) 
    for i in range(len(award[n+1])): 
      for k in range(len(temp)): 
      if(temp[k][0]==award[n+1][i][0]): 
       temp[k][1]+=award[n+1][i][1] 
       break 
     else: 
      temp.append(award[n+1][i]) 

    print 'temp', temp 
    trouble.append(temp) 
    print '\tn = ',n, '\n\ttrouble' 
    for i in range(len(trouble)): 
     print trouble[i] 
    print '\n' 

輸出看起來是這樣的:

temp [['A', 2], ['B', 1], ['C', 1]] 
    n = 0 
    trouble 
[['A', 2], ['B', 1], ['C', 1]] 


temp [['A', 2], ['C', 2], ['D', 1]] 
    n = 1 
    trouble 
[['A', 2], ['B', 1], ['C', 2]] 
[['A', 2], ['C', 2], ['D', 1]] 

我不明白爲什麼[「C」,1],還沒有(據我)追加的第一個實例後,被感動,在第二次追加後發生變化。

任何幫助將非常感激。

預先感謝您。

Anagha Madhusudanan

+1

對不起,這是可怕的代碼 –

+1

你究竟在這裏做什麼? –

+0

我的意思並不重要,但是這段代碼幾乎不可讀。如果您絕對必須能夠訪問python列表中的項目的數字索引,請通過'for idx,enumerate(lst)'中的項目訪問它們。除了幫助你清理這個問題的建議之外,我實在沒有辦法破譯你要做的事情。我不能在心理上將它映射到足夠好的位置,以查看你的附加錯誤的位置,但這並不能幫助你的「獎勵」列表與不同長度的子列表深深嵌套。 –

回答

0

我認爲這個問題是所有的,因爲這樣的:

temp.append(award[n+1][i]) 

獎項的參考文獻[1] [1]有添加了麻煩的兩倍,因此是添加任何元素,所有價值將會改變。 當您將列表追加到母表中時,您應該進行深層複製。

award=[[['A',1],['B',1]],[['A',1],['C',1]],[['A',1],['C',1],['D',1]]] 

trouble=[] 
print '\n' 
for n in range(len(award)-1): 
    temp=[] 
    for i in range(len(award[n])): 
     tem = award[n][i][:] // deep copy 
     temp.append(tem) 
    for i in range(len(award[n+1])): 
     for k in range(len(temp)): 
      if(temp[k][0]==award[n+1][i][0]): 
       temp[k][1]+=award[n+1][i][1] 
       break 
     else: 
      tem = award[n+1][i][:] # deep copy 
      temp.append(tem) 

    print 'temp', temp 
    trouble.append(temp) 
    print '\tn = ',n, '\n\ttrouble' 
    for i in range(len(trouble)): 
     print trouble[i] 
    print '\n' 



# temp [['A', 2], ['B', 1], ['C', 1]] 
    # n = 0 
    # trouble 
# [['A', 2], ['B', 1], ['C', 1]] 


# temp [['A', 2], ['C', 2], ['D', 1]] 
    # n = 1 
    # trouble 
# [['A', 2], ['B', 1], ['C', 1]] 
# [['A', 2], ['C', 2], ['D', 1]] 
+0

感謝噸...工作。 – user1715985