2013-12-15 44 views
3

我是編程新手,並且遇到了一個我正在用python編寫的算法的問題。它首先從一系列變量(每個變量都包含一個列表)組裝一個列表,並且我需要它能夠在一個序列中多次調用同一個變量。然後,它的進程列表就像這樣:如果某些列表組件是相同的,如何讓列表處理函數避免重複操作?

a = [1, 2, 3] 

b = [4, 5, 6] 

c = [a, b] 

def function(input): 
    return output 

使function(c)回報[[1, 2, 3, output_a1], [4,5,6, output_b1]]

如果有人想了解更多有關的功能,我會很樂意提供更多的信息,但我的故障排除這一步使我相信源頭問題相當簡單。我遇到的問題是,如果我把我的主列表相同的變量多次像這樣:c = [a, b, a],我想function(c)返回:

[[1, 2, 3, output_a1], 
[4, 5, 6, output_b1], 
[1, 2, 3, output_a2]] 

然而,function()過程a所有實例,當它遇到剛一個,讓我得到:

[[1, 2, 3, output_a1, output_a3], 
[4, 5, 6, output_b1], 
[1, 2, 3, output_a1, output_a3]] 

我發現兩種方法來解決這個問題,但我真的不是很滿意,我懷疑有一個更好的辦法。在第一種方式,我打印c複製並粘貼到功能:

function_a([[1, 2, 3], [4, 5, 6], [1, 2, 3]]) 

,這將返回所需的輸出。另外,我可以創建另一個變量,其內容與a,d = [1, 2, 3]相同,並且具有c = [a, b, d],並且function_a(c)將再次返回所需的輸出。我已經嘗試了各種各樣的東西,但似乎如果c中的任何元素通過變量鏈接到另一個元素,那麼我遇到了這個錯誤。因爲我將用相當長的序列來運行這個算法,這些序列可能包含同一個元素的多個實例,所以我真的很喜歡用一種乾淨的方法來解決這個錯誤。任何建議都非常感謝,如果需要,我會提供有關該功能的更多詳細信息。謝謝閱讀!

+1

'function'做什麼?你能告訴我們該函數的來源嗎? – thefourtheye

+0

非常棒的第一個問題;)走的方式! – brandonscript

+0

列表中只有一個實例。 'a'只是指向對象。當你改變'a'時,你會改變原始列表,所以所有指向它的變量都會被「修改」。你的功能需要在列表的副本上工作。 – Blender

回答

0

如果有人在閱讀本文時遇到同樣的問題,Roberto回覆了this link,它提供瞭解決問題所需的全部信息。我不知道,如果我正在處理包含來自同一變量的多個副本的嵌套列表,我需要對其進行深層複製以防止修改列表的任何部分。