使用 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))
我试图理解为什么我的代码看起来像这样:
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))