Python将一个列表附加到一个列表,然后清除i

2024-09-30 16:32:15 发布

您现在位置: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"]]

Tags: 代码intestforinputhererangeint
2条回答

不是将outputClist中包含的元素传递到outputCList(不是最好的命名实践,也不是只有一个大写部分是变量名的唯一区别),而是传递对列表本身的引用。为了绕过Python的这个重要而有用的特性,您可以很容易地通过更改这一行来传递一个包含outputClist元素的新列表

 outputCList.append(outputClist)

 outputCList.append(list(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)

相关问题 更多 >