使用 zip() 创建列表

Creating a list with zip()

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

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' object has no attribute 'append'

但是当我这样做时:

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)

有效,语法有问题吗? ,我的意思是 points 被定义为一个列表并且列表有 append 方法。

这是因为 points.append(point) 是一种方法而不是 return 值,因此当您执行 points = points.append(point) 时,points 会获取(缺少 a) return 值并变为 None(您用 None 类型覆盖了 list 类型)。

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

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

在您的第一个代码中,在循环的第一次迭代之后,points 被分配了 return 值或 .append(),它没有 return 任何东西。

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

append 是列表中的一个方法,return 没有任何东西(所以 returns None 对象)。因此 points 在第一次迭代后设置为 None

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

points = list(zip(labels, x_coord,y_coord, z_coord))