[英]Python creating 2D array in object constructor with variable length
我在創建對象時遇到問題,其中二維數組具有可變長度。 我不斷收到錯誤
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中,您不能僅通過給定大小來初始化具有給定大小的數組,而且您也不需要
要將給定列表分配給state
,請通過執行復制它
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) # [[], []]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.