Python 没有像我预期的那样遍历 range() 列表
Python is not iterating through range() list as I expected
我还在学习Python的来龙去脉,遇到了绊脚石
我正在尝试创建一个 n^2 大小的对象网格,以保存与其在网格上的 (x,y) 坐标相对应的数据,但是当我尝试将网格作为二维数组进行迭代时,它不知何故只需为所有坐标分配最大 n 值。我想我缺少关于 Python 如何遍历列表以及如何在 for 循环中使用它们的基本概念。这是对象:
class Node:
def __init__(self,x,y):
self.x = x
self.y = y
def pos(self,x,y):
self.x = x
self.y = y
这是网格。为了简单起见,我设置 n=10:
class Stage:
bg = ([([comp.Node(0,0)] * 10)] * 10)
def drawNodes(self):
for x in range(10):
for y in range(10):
self.bg[x][y].pos(x,y)
stage1 = Stage()
当我 运行 drawNodes() 函数时,它似乎为所有 Node 对象分配了 x 和 y 值 9。我在这里缺少什么逻辑?感谢任何有建议的人!
问题是这个 bg = ([([comp.Node(0,0)] * 10)] * 10) 将对同一对象的引用放入所有条目中。试试这段代码看看效果
a = [[{}]*3]*3
a[0][0]["a"] = 100
这导致 [[{'a': 100}, {'a': 100}, {'a': 100}], [{'a': 100}, {'a': 100}, {'a': 100}], [{'a': 100}, {'a': 100}, {'a': 100}]]
尝试像这样初始化bg
bg = [[comp.Node(0,0) for _ in range(10)] for _ in range(10)]
这将创建 100 个不同的对象,而不仅仅是将对同一对象的引用放入列表的不同位置
我还在学习Python的来龙去脉,遇到了绊脚石
我正在尝试创建一个 n^2 大小的对象网格,以保存与其在网格上的 (x,y) 坐标相对应的数据,但是当我尝试将网格作为二维数组进行迭代时,它不知何故只需为所有坐标分配最大 n 值。我想我缺少关于 Python 如何遍历列表以及如何在 for 循环中使用它们的基本概念。这是对象:
class Node:
def __init__(self,x,y):
self.x = x
self.y = y
def pos(self,x,y):
self.x = x
self.y = y
这是网格。为了简单起见,我设置 n=10:
class Stage:
bg = ([([comp.Node(0,0)] * 10)] * 10)
def drawNodes(self):
for x in range(10):
for y in range(10):
self.bg[x][y].pos(x,y)
stage1 = Stage()
当我 运行 drawNodes() 函数时,它似乎为所有 Node 对象分配了 x 和 y 值 9。我在这里缺少什么逻辑?感谢任何有建议的人!
问题是这个 bg = ([([comp.Node(0,0)] * 10)] * 10) 将对同一对象的引用放入所有条目中。试试这段代码看看效果
a = [[{}]*3]*3
a[0][0]["a"] = 100
这导致 [[{'a': 100}, {'a': 100}, {'a': 100}], [{'a': 100}, {'a': 100}, {'a': 100}], [{'a': 100}, {'a': 100}, {'a': 100}]]
尝试像这样初始化bg
bg = [[comp.Node(0,0) for _ in range(10)] for _ in range(10)]
这将创建 100 个不同的对象,而不仅仅是将对同一对象的引用放入列表的不同位置