Python在具有可变长度的对象构造函数中创建2D数组
我在创建对象时遇到问题,2D数组的长度可变。我总是出错Python在具有可变长度的对象构造函数中创建2D数组,python,arrays,constructor,Python,Arrays,Constructor,我在创建对象时遇到问题,2D数组的长度可变。我总是出错 self.state[i] = listt[i] IndexError: list assignment index out of range 如果我尝试用2行3列的数组创建对象,它会工作。如果我尝试创建一个包含3行3列的对象,它将失败并出现错误 class node: def __init__(self, m, n, listt=None): self.not_in_place = -1 self
self.state[i] = listt[i]
IndexError: list assignment index out of range
如果我尝试用2行3列的数组创建对象,它会工作。如果我尝试创建一个包含3行3列的对象,它将失败并出现错误
class node:
def __init__(self, m, n, listt=None):
self.not_in_place = -1
self.m = m
self.n = n
self.state = [[m],[n]]
if listt is not None:
for i in range(self.m):
self.state[i] = listt[i]
start = [[0,1,2],[3,4,5],[6,7,8]]
node(3, 3, start) # doesn't work
start_2 = [[0,1,2],[3,4,5]]
node(2, 3, start_2) # work
我做错了什么 在python中,不能仅通过给定大小来初始化给定大小的数组,也不需要这样做 要将给定列表指定给
状态
,请执行以下操作复制该列表
if listt is not None:
self.state = list(listt)
它在第二种情况下起作用的原因是,您创建了一个包含2个子列表的列表,因此创建了2个框,当您对它们进行迭代时,这是正常的,这也是为什么尝试长度为3时失败的原因
state = [[2], [3]] # [[2], [3]], and not [[,,], [,,]]
如果要初始化为空,如果listt
为None,则可以执行以下操作
class node:
def __init__(self, m, n, listt=None):
self.not_in_place = -1
self.m = m
self.n = n
self.state = [[]] * m
if listt is not None:
self.state = list(listt)
def __str__(self):
return str(self.state)
if __name__ == '__main__':
start = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
n = node(3, 3, start)
print(n) # [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
n = node(2, 3, None)
print(n) # [[], []]
非常感谢!现在我有另一个问题。如何获取数组中例如0的数字的位置/索引[x][y]?我需要它的位置,这样我就可以处理数组。@TomášRončák读取
[0,1,2]
dostate[0]
,读取0
dostate[0][0]