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

我正在努力解决一些问题,并在代码中找到了两个列表之间的差异:来自Python调试器:

(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工作得很好,标志着这一个完成了!