簡體   English   中英

Python在可變長度的對象構造函數中創建二維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM