Python将列表附加到列表然后清除它

时间:2015-06-19 15:45:24

标签: python list

我将此部分代码隔离用于测试目的和此问题

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"]]

2 个答案:

答案 0 :(得分:1)

而不是将outputClist中包含的元素传递给outputCList(不是最大的命名实践,或者只是将一个大写的中间部分作为变量名称的唯一区别),而是传递一个引用清单本身。为了解决您不想使用的Python这个重要且有用的功能,您可以通过更改此行轻松传递包含outputClist元素的新列表

 outputCList.append(outputClist)

 outputCList.append(list(outputClist))

或等效地,正如@jonrsharpe在其评论中所述

 outputCList.append(outputClist[:])

答案 1 :(得分:1)

在Python中,一切都是对象。列表是具有元素的对象。您只需创建一个对象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)