0

我试图理解为什么我的代码看起来像这样:

x_coord = [23, 53, 2, -12, 95, 103, 14, -5]
y_coord = [677, 233, 405, 433, 905, 376, 432, 445]
z_coord = [4, 16, -6, -42, 3, -6, 23, -1]
labels = ["F", "J", "A", "Q", "Y", "B", "W", "X"]
points=[]
for point in zip(labels, x_coord,y_coord, z_coord):
    points = points.append(point)

我得到错误:

AttributeError:“NoneType”对象没有“附加”属性

但是当我这样做时:

x_coord = [23, 53, 2, -12, 95, 103, 14, -5]
y_coord = [677, 233, 405, 433, 905, 376, 432, 445]
z_coord = [4, 16, -6, -42, 3, -6, 23, -1]
labels = ["F", "J", "A", "Q", "Y", "B", "W", "X"]
points=[]
for point in zip(labels, x_coord,y_coord, z_coord):
    points.append(point)

它有效,语法有问题吗?,我的意思是点被定义为一个列表,并且列表具有附加方法。

4

4 回答 4

1

append是列表上的一个方法,不返回任何东西(所以返回None对象)。因此points设置为None在第一次迭代之后。

顺便说一句,没有必要迭代:

points = list(zip(labels, x_coord,y_coord, z_coord))
于 2020-05-06T15:05:54.910 回答
0

这是因为points.append(point)它是一种方法并且不返回值,因此当你这样做时points = points.append(point)points会获取(缺少)返回值并变成(你用类型None覆盖了类型)。listNone

但是,当您这样做时point.append(point),您通过调用其内置方法将元素正确添加到列表中,而不是覆盖任何内容,这就是第二个代码有效但第一个无效的原因。

于 2020-05-06T15:01:29.200 回答
0

使用points=points.append(point),您实际上分配了 aNoneType Object而不是 list ,因为points.append(point)return None。因此,分配points=points.append(point)会破坏您的列表。

于 2020-05-06T15:03:25.977 回答
0

在您的第一个代码中,在循环的第一次迭代之后,points被分配了返回值 or .append(),它不返回任何内容。

如果您想使用赋值语句添加到列表中,您可以这样做points[len(points):len(points)] = [point]

于 2020-05-06T15:05:06.113 回答