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

Python将列表附加到列表,然后清除它,python,list,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) o

为了测试的目的和这个问题,我隔离了这部分代码

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

您不是将
outputClist
中包含的元素传递给
outputClist
(也不是最大的命名实践,因为只有一个大写字母是变量名的唯一区别),而是传递对列表本身的引用。要绕过Python的这一重要而有用的特性,您不想使用它,只需更改此行,就可以非常轻松地传递一个包含
outputClist
元素的新列表

 outputCList.append(outputClist)

或者,正如@jornsharpe在他的评论中所说的那样

 outputCList.append(outputClist[:])

在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)

outputClist[:]=[]
正在显式删除您已放入列表中的所有内容。我想你想要的是
outputCList.append(outputCList[:])
。@jornsharpe不完全是我想的,但谢谢你的帮助。Daniel发布的解决方案很管用。这和我的想法不太一样,但谢谢你对命名的建议。丹尼尔发布的解决方案奏效了。
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)