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)