2015-06-19 98 views
0

我有隔離測試目的這部分代碼和這個問題Python中附加一個列表,列表,然後將其清除

noTasks = int(input()) 
noOutput = int(input()) 
outputClist = [] 
outputCList = [] 

for i in range(0, noTasks): 
    for w in range(0, noOutput): 
     outputChecked = str(input()) 
     outputClist.append(outputChecked) 
    outputCList.append(outputClist) 
    outputClist[:] = [] 
print(outputCList) 

我這裏有這個代碼,我得到這個輸出

[[], []] 

我無法弄清楚如何得到下面的輸出,我必須清除子列表或我得到的東西完全錯誤的......

[["test lol", "here can be more stuff"], ["test 2 lol", "here can be more stuff"]] 
+0

'outputClist [:] = []'是** **明確你已經把進入名單已經刪除了一切。我想你需要'outputCList.append(outputClist [:])',而不是。 – jonrsharpe

+0

@jonrsharpe不完全是我想到的,但謝謝你試圖幫助。丹尼爾發佈的解決方案工作。 – snorkle213

回答

1

在Python一切@jonrsharpe狀態是一個對象。列表是一個包含元素的對象。您只能創建一個對象outputclist填充並清除其內容。最後,在outputCList中您有多個列表中的多個列表,並且作爲最後一件事情是清除列表,此列表爲空。

相反,你必須創建一個新的列表,每一個任務:

noTasks = int(input()) 
noOutput = int(input()) 
output = [] 

for i in range(noTasks): 
    checks = [] 
    for w in range(noOutput): 
     checks.append(input()) 
    output.append(checks) 
print(output) 
1

而不是將包含的元素傳遞給outputClistoutputCList(不是最大的命名實踐,或者只是將一個大寫中途變成變量名中的唯一區別),那麼您將傳遞對列表本身的引用。要解決這個問題,你不想使用Python中的這一重要而實用的功能,你可以很容易地僅僅通過改變這一行

outputCList.append(outputClist) 

傳遞包含的 outputClist元素的新列表
outputCList.append(list(outputClist)) 

或等價地,在他的評論

outputCList.append(outputClist[:]) 
+0

不是我想到的,但感謝關於命名的建議。 Daniel發佈的解決方案工作。 – snorkle213

相關問題