Python 请告诉这个新手这两个列表输出之间的区别是什么?
我正在努力解决一些问题,并在代码中找到了两个列表之间的差异:来自Python调试器:Python 请告诉这个新手这两个列表输出之间的区别是什么?,python,django,list,python-2.7,Python,Django,List,Python 2.7,我正在努力解决一些问题,并在代码中找到了两个列表之间的差异:来自Python调试器: (Pdb) Values ['Thing1', 'Thing2', 'Thing3'] (Pdb) values2 [['Thing1', 'Thing2', 'Thing3']] 我不想要双括号,这意味着什么?我如何摆脱它们 'Values' creation was by: values = ['Thing1','Thing2','Thing3'] “Values2”的创建由以下人员完成: for re
(Pdb) Values
['Thing1', 'Thing2', 'Thing3']
(Pdb) values2
[['Thing1', 'Thing2', 'Thing3']]
我不想要双括号,这意味着什么?我如何摆脱它们
'Values' creation was by:
values = ['Thing1','Thing2','Thing3']
“Values2”的创建由以下人员完成:
for report in Report.objects.filter(id=id):
values2.append([str(report.name), str(report.subject), str(report.description)])
为什么会有这种差异,如何才能使值2看起来像值?不要将其视为“双括号”。把它想象成两组单括号,一个在另一个里面。一组括号表示您有一个列表。两组单括号表示有两个列表。一组括号在另一组括号内表示您在另一个列表内有一个列表
这是因为您附加的值是一个列表,因为您执行了values2.append([…])
。[…]
是一个列表,因此您添加了一个列表;也就是说,您在values2
中放置了一个嵌套列表
如果你不想这样,你可以:
values2.extend([str(report.name), str(report.subject), str(report.description)])
extend
将列表中的每个元素添加为单独的元素,而不是将整个列表添加为一个元素。(这在程序的更大范围内是否真正起作用取决于您实际使用的值2
)不要将其视为“双括号”。把它想象成两组单括号,一个在另一个里面。一组括号表示您有一个列表。两组单括号表示有两个列表。一组括号在另一组括号内表示您在另一个列表内有一个列表
这是因为您附加的值是一个列表,因为您执行了values2.append([…])
。[…]
是一个列表,因此您添加了一个列表;也就是说,您在values2
中放置了一个嵌套列表
如果你不想这样,你可以:
values2.extend([str(report.name), str(report.subject), str(report.description)])
extend
将列表中的每个元素添加为单独的元素,而不是将整个列表添加为一个元素。(这在程序的更大范围内是否真正起作用取决于您对values2
的实际操作)values2
是一个包含单个元素的列表,该元素是一个列表
您正在将列表附加到列表。您要做的是扩展值2
列表:
for report in Report.objects.filter(id=id):
values2.extend([str(report.name), str(report.subject), str(report.description)])
values2
是一个包含单个元素的列表,该元素是一个列表
您正在将列表附加到列表。您要做的是扩展值2
列表:
for report in Report.objects.filter(id=id):
values2.extend([str(report.name), str(report.subject), str(report.description)])
如果你看你的环
for report in Report.objects.filter(id=id):
values2.append( [ str(report.name), str(report.subject), str(report.description) ] )
您可以看到添加到values2
的内容是列表中的内容
[ str(report.name), str(report.subject), str(report.description) ]
因此,values2
——假设它一开始是空的——现在有一个元素,就是这个列表,它看起来像
[
['Thing1', 'Thing2', 'Thing3'],
]
正如你所描述的
如果您想附加三个字符串,那么您必须一次附加一个,如下所示
for report in Report.objects.filter(id=id):
values2.append(str(report.name))
values2.append(str(report.subject))
values2.append(str(report.description))
或者您可以使用
extend
,但我相信这不太清楚。如果您查看您的循环
for report in Report.objects.filter(id=id):
values2.append( [ str(report.name), str(report.subject), str(report.description) ] )
您可以看到添加到values2
的内容是列表中的内容
[ str(report.name), str(report.subject), str(report.description) ]
因此,values2
——假设它一开始是空的——现在有一个元素,就是这个列表,它看起来像
[
['Thing1', 'Thing2', 'Thing3'],
]
正如你所描述的
如果您想附加三个字符串,那么您必须一次附加一个,如下所示
for report in Report.objects.filter(id=id):
values2.append(str(report.name))
values2.append(str(report.subject))
values2.append(str(report.description))
或者您可以使用
extend
,但我认为这不太清楚。Values
是一个列表,其中有3个str
,而values2
是一个列表,其中有一个list
,内部列表中有三个str
对象。Values
是一个list
中有3个str
,而values2
是一个list
中有一个list
的列表,内部列表中有三个str
对象。我怀疑在这种情况下,他们真的想要一个列表列表(或元组),他们只是还不知道而已。我怀疑在这种情况下,他们真的想要一个列表(或元组)列表,他们只是还不知道。在单个extend
调用中有更多的杂音,而且它的长度不必要。在三个append
调用中对齐匹配的字符可以很明显地看出,它对同一对象的三个不同属性执行相同的操作。这远不是明确的,这就是我为什么要写这篇文章的原因“我认为这还不太清楚"很抱歉,这立即解决了我当天的最后一个问题,extend工作得很好,标记这一个完成了!单个extend
调用中有更多的噪音,而且不必要的长。对齐三个append
调用中的匹配字符可以很明显地看出,它对t的三个不同属性执行相同的操作他说的是同一个对象。这远不是清晰的,这就是为什么我写了“我相信那会不那么清晰”对不起,这立刻解决了我一天中的最后一个问题,extend工作得很好,标志着这一个完成了!